热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#程序与MongoDB数据库开发基础

MongoDB支持C#/JAVA/PHP等主流语言进行操作,今天讲一下最简单的使用C#操作MongoDB(先下载c#对应的DLL)。说明:MongoDB的安装和运行在上一个章节已经详细讲了,今天主要是讲MongoDB的基本操作,但这里说一个小问题,当MongoDB运行时,我强制关闭了MongoDB

MongoDB 支持C#/JAVA/PHP等主流语言进行操作,今天讲一下最简单的使用C#操作MongoDB(先下载c#对应的DLL)。

说明:MongoDB 的安装和运行在上一个章节已经详细讲了,今天主要是讲MongoDB的基本操作,但这里说一个小问题,当MongoDB运行时,我强制关闭了MongoDB,当我再次启动时,发现启动失败,其实解决办法挺简单,就是删除.lock文件。

错误信息如下:

Mon Sep 19 06:14:55 [initandlisten] MongoDB starting : pid=4126 port=27017 dbpath=/usr/local/mongo/data 64-bit

Mon Sep 19 06:14:55 [initandlisten] db version v1.8.1, pdfile version 4.5
Mon Sep 19 06:14:55 [initandlisten] git version: nogitversion
Mon Sep 19 06:14:55 [initandlisten] build sys info: Linux localhost.localdomain 2.6.18-238.19.1.el5 #1 SMP Fri Jul 15 07:31:24 EDT 2011 x86_64
BOOST_LIB_VERSION=1_33_1
**************
old lock file: /usr/local/mongo/data/mongod.lock.  probably means unclean shutdown
recommend removing file and running --repair
see: http://dochub.mongodb.org/core/repair for more information
*************
Mon Sep 19 06:14:55 [initandlisten] exception in initAndListen std::exception: old lock file, terminating
Mon Sep 19 06:14:55 dbexit:
Mon Sep 19 06:14:55 [initandlisten] shutdown: going to close listening sockets...
Mon Sep 19 06:14:55 [initandlisten] shutdown: going to flush diaglog...
Mon Sep 19 06:14:55 [initandlisten] shutdown: going to close sockets...
Mon Sep 19 06:14:55 [initandlisten] shutdown: waiting for fs preallocator...
Mon Sep 19 06:14:55 [initandlisten] shutdown: closing all files...
Mon Sep 19 06:14:55 closeAllFiles() finished
Mon Sep 19 06:14:55 dbexit: really exiting now

查阅到的问题分析有一句话:

Analysis:If a server running MongoDB crashed or MongoDB did not get to shut down cleanly for some other reason, you may not be able to start Mongo again, getting "exception in initAndListen std::exception: old lock file, terminating" error in Mongo error log.

相信大家都读得懂,就不翻译了,解决办法就一句话:

Fix is actually pretty easy, you just need to locate mongod.lock file and remove it.

解决这个问题的办法很简单,你只需要定位到mongod.lock文件,删除它即可。

进入正题:

1)简单插入对象到数据库

private void SingleInsert()
        {
try
{
//此方法已过时,MongoClient.GetServer替代
//MongoServer server = MongoDB.Driver.MongoServer.Create(strconn);

MongoClient mc = new MongoClient(strconn);

MongoServer server = mc.GetServer();

MongoDatabase db = server.GetDatabase(dbName);

MongoCollection collection = db.GetCollection("jrsc");

BsonDocument bd1 = new BsonDocument { { "name", "li jing" }, { "age", "18" }, { "sex", "female" } };

Console.WriteLine("Record has been successfully inserted.");

collection.Insert(bd1);

}
catch (Exception ex)
{
Console.WriteLine("Error"+ex.Message);
}
        }

前面通过MongoClient拿到Server,然后拿到DB,然后拿到我们想要操作的集合(这里不再是DataTable)而是Collection,基本组成元素的BsonDocument,这时候我们对Collection进行操作即可,值得注意的一点是:我们不需要调用save方法,自动帮我们把结果保存到数据库。

2)插入强类型对象到数据库

如果我们的对象式Student类型的,我们是不能直接拿简单的collection进行插入,需要拿到GetCollection类型的collection进行插入操作,这时候插入是支持的。

private static void StrongTypeObjectInsert()
        {
try {
MongoClient mc = new MongoClient(strconn);

MongoServer server = mc.GetServer();

MongoDatabase db = server.GetDatabase(dbName);

MongoCollection PersOns= db.GetCollection("jrsc");

Person p = new Person { P_ID = 1,P_NAME = "Person01" };

Persons.Insert(p);

Console.WriteLine("StrongTypeObjectInsert successfully.");

}catch(Exception ex)
{
Console.WriteLine("Error:"+ex.Message);
}
        }

同样我们不需要使用save方法进行更新到数据库的操作,注意jrsc是数据中collection对应的名称。

3)批量插入

在关系型数据库中,我们可以使用针对批量的数据进行更新到数据库,对象数据库同样支持。

private static void BatchInsert()
        {
List pl = new Data().GetPersonList();

try{
MongoClient mc = new MongoClient(strconn);

MongoServer server = mc.GetServer();

MongoDatabase db = server.GetDatabase(dbName);

MongoCollection PersOns= db.GetCollection("jrsc");

BsonDocument[] batch = new BsonDocument[pl.Count];

for (int i = 0; i {
batch[i] = new BsonDocument { { "P_ID", pl[i].P_ID.ToString()}, { "P_NAME", pl[i].P_NAME.ToString()}};
}

Persons.InsertBatch(batch);

Console.WriteLine("BatchInsert successfully.");

}
catch(Exception ex){

Console.Write("Error:"+ex.Message);

}
        }

唯一需要注意的是BsonDocument的格式写法。

4)数据查询操作

数据查询操作有单一记录查找和全部查找。

public static void Query()
        {
try {

MongoClient mc = new MongoClient(strconn);

MongoServer server = mc.GetServer();

MongoDatabase db = server.GetDatabase(dbName);

MongoCollection PersOns= db.GetCollection("jrsc");

var query = new QueryDocument("name","li jing");

foreach (BsonDocument p in Persons.Find(query))
{
Console.WriteLine("name"+p["name"]+",age:"+p["age"]);
}

Console.WriteLine("Mongo Query successfully.");

}catch(Exception ex)
{
Console.WriteLine("Error:"+ex.Message);
}
        }

数据查询的结果可以直接给游标,通过游标进行处理,这里就不详细讲。

5)数据更新

    private static void Update()
        {
try
{
MongoClient mc = new MongoClient(strconn);

MongoServer server = mc.GetServer();

MongoDatabase db = server.GetDatabase(dbName);

MongoCollection PersOns= db.GetCollection("jrsc");

var query1 = new QueryDocument("name", "li jing");

foreach (BsonDocument p in Persons.Find(query1))
{
Console.WriteLine("您希望"+ p["name"] + "几岁?");
p["age"] = Console.ReadLine();
Persons.Save(p);
}

var query2 = new QueryDocument("name", "li jing");

foreach (BsonDocument p in Persons.Find(query2))
{
Console.WriteLine("id"+p["_id"]+"name:"+p["name"]+",age:"+p["age"]);
}

Console.WriteLine("Mongo Query successfully.");
}
catch (MongoQueryException ex)
{

Console.WriteLine("Error:" + ex.Message);
}
        }

数据更新只需要对值进行重新赋值,并且需要调用save方法即可。

基本操作到这里介绍结束,打完收工!


推荐阅读
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文是关于C#类型系统、值类型和引用类型的概念性笔记。介绍了C#1系统类型的三个特性,静态类型的含义,显式类型和隐式类型的区别。还讨论了类、结构、数组类型、枚举、委托类型和接口类型属于哪一种类型。同时纠正了关于结构、引用类型和对象传递的错误表述。最后提到了C#4中使用动态类型的关键字。 ... [详细]
author-avatar
多米音乐_34026248
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有