* 0、MongoClient 类
* 这个类是操控MongoDB服务器的根对象。与服务器的连接是自动在后台处理的 (用了一个连接池来提升效率).
当连接到一个副本是,用的仍然只有一个MongoClient的实例,它代表一个完整的副本。驱动会自动找出所有副本里的成员并识别出当前的主服务器。
这个类的实例是线程安全的。
操作默认情况下,除非设置了,否则,所有的操作需要WriteConcern使用W = 1。换句话说,默认情况下,所有的写操作都会阻塞,直到服务器已经确认。
连接字符串的格式:mongodb://[username:password@]hostname[:port][/[database][?options]]
[username:password@] 用户评价的账号密码 , 只有在MongoDB服务器使用了身份验证时才出现 非必须
hostname[:port] 主机和端口 默认为 27017 要连接多个服务器的话,用逗号分隔多个主机名(和端口号,如果有的话。mongodb://server1,server2:27017,server2:27018 必须
* [/[database][?options]] 库和额外操作,可选的模式有:自动 automatic (默认), 直接 direct, 副本replica set, 和 分片路由 shardrouter。 非必须
* 说明:如果在创建连接的时候指定了凭据,那它就是默认凭据。所有的库都使用该凭据在访问时。在此基础上也可以之后为单独的库指定访问凭据
* 一、 MongoServer 类:
1、 要从MongoClient获取MongoServer 实例可以使用GetServer方法
2、从 MongoServer 实例取得 MongoDatabase 实例可以使用 GetDatabase 方法,由五种重载,
MongoCredentials为数据库访问的身份认证凭据;
大多数的数据设置都是从服务器对象继承来的, GetDatabase 提供的重载可以对经常使用的设置进行覆盖。
要覆盖其它设置,调用 CreateDatabaseSettings 并在调用 GetDatabase 之前更改任何你想要的设置

MongoDatabase GetDatabase(string databaseName)
MongoDatabase GetDatabase(string databaseName, MongoCredentials credentials)
MongoDatabase GetDatabase(string databaseName, MongoCredentials credentials, WriteConcern writeConcern)
MongoDatabase GetDatabase(string databaseName, WriteConcern writeConcern)
MongoDatabase GetDatabase(MongoDatabaseSettings settings)
3、 RequestStart/RequestDone 方法
有时候为了保证结果正确,需要在同一个连接里执行一系列操作。这比较少见,而且大多数时候没有必要去调用 RequestStart/RequestDone。有必要这么做的一个例子是在w=0的WriteConcern的快速会话中调用了一系列的Insert,然后紧接着马上查询出这些数据来(在w=0的WriteConcern下,服务器里的写操作会排队,而且可能不会马上对其它连接可见)。使用 RequestStart 可以在同一个连接里在写的时候强制查询,因此查询直到服务器捕获了写操作之后才会执行。
通过使用RequestStart 和 RequestDone,线程可以从连接池里暂时保留一个连接,例如:
using(server.RequestStart(database)) {
// 在同一个连接里需要执行一系列操作
}
database 参数只是简单地说明你要在这个请求期间要用哪些数据库。这使服务器能够对已经身份验证通过的数据库拿来就用 (如果没用身份验证那这个优化就没关系了)。在这个请求期间你可以任意地使用其它数据库了。
RequestStart (为这个线程)增加了一个计数,在完成后再减掉。保留的连接实际不是返回到连接池里,直到计数再次变为0。这说明嵌套调用 RequestStart 是没有问题的。
RequestStart 返回了一个 IDisposable。如果是在using块里用 RequestStart ,为了释放连接最好尽快调用 RequestDone 。
二、 MongoDatabase 类:
线程安全的 这个类表示 MongoDB 服务器的数据库。通常每个数据库只有一个实例,除非你是用不同的设置来访问同一个数据库,这样就是每个设置都有一个实例。
1、GetCollection 此方法返回一个表示数据库里集合的对象。当请求一个集合对象时,要同时制定集合的默认文档类型。
GetCollection 维系了之前返回过的一个实例表,因此如果以同样的参数再次调用 GetCollection 会得到同一个实例。
GetCollection 提供的重载可以对常用的设置进行覆盖。要覆盖其它的设置,调用 CreateCollectionSettings 并在调用 GetCollection 之前更改任何你想要的设置
三、MongoCollection<TDefaultDocument> 类 此类表示 MongoDB 数据库里的集合。 <TDefaultDocument> 泛型参数指定了此集合默认文档的类型。
* 1、Insert<TDocument> 方法 要在集合里插入一个文档,创建一个表示该文档的对象并调用 Insert。对象可以是BsonDocument 的实例或者是可以成功序列化为BSON文档的任何类的实例
2、InsertBatch 一次性插入多个文档 插入多个文档时,使用 InsertBatch 比 Insert 效率更高
* 3、Find 和 FindAs 方法通过接受一个查询,告诉服务器要返回那个文档,query 参数是 IMongoQuery 类型的
* 4、Save<TDocument> 方法
Save 方法是 Insert 和 Update的组合。如果文档的 Id 有值,那么就假定这是一个已经存在的文档,Save就会在文档上
调用Update(设置Upsert标记以防止它实际上是个新文档)。否则就假定这是一个新文档,Save会在首先将新生成的唯一值设到Id上,然后调用Insert。
5、Update
6、FindAndModify 当你想要查找一个文档并在一个原子操作里更新它时,就使用 FindAndModify。 FindAndModify 只更新一个文档,配合使用具有排序标准的多文档查询来确定到底要更新哪个文档。另外, FindAndModify 会返回符合条件的文档 (不管是在更新前还是更新后) 而且可以指定要返回文档的那些字段。
* 7、MapReduce 方法Map/Reduce 是从集合里汇总数据的一种方法。集合里的每一个文档(或者某些子集,如果可选查询提供了的话)都被传到map函数,该函数调用emit来产生中间值。然后中间值被传到reduce函数进行汇总。
* 四、IMongoQuery 接口标记了类可以用来进行查询。构建查询的最常用方法是要么使用Query建造类,
要么自己创建一个QueryDocument (QueryDocument 是BsonDocument 的子类,同时实现了 IMongoQuery 因此可以用作查询对象)。
同时,通过使用 QueryWrapper 类,查询可以是任何能序列化为BSON文档的类型,不过这取决于你得保证序列化后的文档表示的是一个
有效的查询对象。
* 五、WriteConcern 类
* WriteConcern 有好几级,这个类就是用来表示这些级次的。 WriteConcern 只是应用在那些没有返回值的操作 (所以它不应用在查询和命令中)。它应用于这几个 MongoCollection 方法: Insert, Remove, Save 和 Update.
WriteConcern 的要领是在 Insert, Remove, Save 或者 Update之后,紧接着调用GetLastError命令将消息发送到服务器,这样驱动就可以操作成功了。另外,当使用副本时,有可能确认信息被复制到最少量的辅服务器上去。

 class Program{//Mongo数据库public static MongoDatabase database;static void Main(string[] args){new Program().GetData();}public void GetData(){//创建数据库链接  相当于1、2步//MongoServer server1 = MongoDB.Driver.MongoServer.Create("mongodb://127.0.0.1:27017");MongoClient client = new MongoClient("mongodb://127.0.0.1:27017");  MongoServer server = client.GetServer();/*获取库的方式*///1、获取order数据库 不需要或采用默认的身份认证凭据MongoDatabase orderdatabase = server.GetDatabase("order"); //2、获取user数据库 需要身份认证凭据MongoCredentials credentials = new MongoCredentials("username", "password");//身份验证MongoDatabase userdatabase = server.GetDatabase("user", credentials);/*3、replica set 中的secondary 节点默认是不可读的。在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。GetDatabase 维系了一个 MongoDatabase 之前返回过的 实例表,因此如果以同样的参数再次调用 GetDatabase 会再次得到相同的实例*/var databasesetting = server.CreateDatabaseSettings("product");databasesetting.SlaveOk = true;var prodatabase = server.GetDatabase(databasesetting);/*获取指定库的指定集合*/MongoCollection o_AmountCollection=orderdatabase.GetCollection<Users>("Amount");//2、 GetCollection 提供的重载可以对常用的设置进行覆盖。要覆盖其它的设置,调用 CreateCollectionSettings 并在调用 GetCollection 之前更改任何你想要的设置var collectionSettings=  prodatabase.CreateCollectionSettings<Users>("Amount");collectionSettings.SlaveOk = true;MongoCollection pro_AmountCollection = prodatabase.GetCollection(collectionSettings);/*往指定库的指定集合添加指定数据*/MongoCollection o_AmountCollectionInsert = orderdatabase.GetCollection<Users>("Amount");Users user = new Users() { Name = "权威指南", Sex = "男" };WriteConcernResult result=o_AmountCollectionInsert.Insert(user);//在我们不知道对象类型的情况下可以使用BsonDocumentMongoCollection o_AmountCollectionInsertBeson = orderdatabase.GetCollection<BsonDocument>("Amount");BsonDocument beson = new BsonDocument {{"Name","farmkwork"},{"Sex","女"}};WriteConcernResult result2=o_AmountCollectionInsert.Insert(beson);           //插入嵌套Beson文档MongoCollection o_ProductCollectionInsertBeson = prodatabase.GetCollection<BsonDocument>("product");BsonDocument besoning = new BsonDocument {{"proname","红富士"},{"address",new BsonDocument{{"country","中国"},{"city","上海"}}}};WriteConcernResult result4 = o_ProductCollectionInsertBeson.Insert(besoning);//一次插入多条记录 插入多个文档时,使用 InsertBatch 比 Insert 效率更高。MongoCollection o_AmountCollectionInsertBesons = orderdatabase.GetCollection<BsonDocument>("Amount");BsonDocument[] besons = {new BsonDocument{{"Name","farmkwork"},{"Sex","女"}},new BsonDocument{{"Name","farmkwork2"},{"Sex","男"}}};List<WriteConcernResult> results = o_AmountCollectionInsert.InsertBatch(besons).ToList();/*查询数据并筛选*///1、创建一个QueryDocument查询,使用query建造类构造查询MongoCollection o_AmountCollectionquery = orderdatabase.GetCollection<BsonDocument>("Amount");var querydoc=new QueryDocument("Name","farmkwork");foreach (BsonDocument b in o_AmountCollectionquery.FindAs(typeof(Users), querydoc)){// do something with book}//2、需要引入using MongoDB.Driver.Builders; 使用 Query Builder (推荐)var queryEQ = Query.EQ("Name", "farmkwork");foreach (BsonDocument b in o_AmountCollectionquery.FindAs(typeof(Users), queryEQ)){// do something with book}/*修改数据*/ MongoCollection o_AmountCollectionupdate = orderdatabase.GetCollection<BsonDocument>("Amount");var queryand = Query.And(Query.EQ("Name", "farmkwork"), Query.EQ("Sex", "女"));//使用save方法 查询一条记录 并修改sexBsonDocument am = (BsonDocument)o_AmountCollectionupdate.FindOneAs(typeof(Users), queryand);if (am != null) {am["Sex"] = "男";o_AmountCollectionupdate.Save(am);//调用Save方法的时候,TDocument 类必须要有Id。如果没有的话可以调用Insert来插入文档。}//使用update方法UpdateBuilder update= Update.Set("Sex", "不男不女");//var update2 = new UpdateDocument { { "$set", new BsonDocument("Sex", "不男不女") } };o_AmountCollectionupdate.Update(queryand, update);}       }public class Users{//_id 属性必须要有,否则在更新数据时会报错:“Element '_id' does not match any field or property of class”。public ObjectId _id;//BsonType.ObjectId 这个对应了 MongoDB.Bson.ObjectId public string Name { get; set; }public string Sex { get; set; }}

  

转载于:https://www.cnblogs.com/shaner/p/4795759.html

mongo c#驱动介绍操作相关推荐

  1. MongoDB之Hadoop驱动介绍

    http://blog.csdn.net/amuseme_lu/article/details/6584661 MongoDB之Hadoop驱动介绍 ------------------------ ...

  2. 04 ARM Mali-V VPU硬件视频编解码驱动介绍V61

    ARM Mali-V VPU硬件视频编解码驱动介绍V61 作者 将狼才鲸 创建日期 2022-12-13 CSDN文章地址:ARM Mali-V VPU硬件视频编解码驱动介绍V61 一.PC上的VPU ...

  3. alsa 驱动介绍及user层到hw层文件ioctl操作流程分析

    您当前位置:首页 > php开源 > 综合技术 > alsa 驱动介绍 alsa 驱动介绍 来源:程序员人生   发布时间:2016-07-02 13:40:22 阅读次数:6838 ...

  4. Redis 小白指南(一)- 简介、安装、GUI 和 C# 驱动介绍

    原文:Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍 Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍 目录 简介 安装 入门指令 GUI 工具 C# 驱动介 ...

  5. 机器人驱动介绍(2)

    基于TRIZ轮式机器人驱动轮的研究 根据亚太机器人大赛规则,要求机器人车轮与地面有较大的摩擦力,以保证机器人在规定的时间内完成比赛任务.文中以TRIZ为理论基础,应用CREAX Innovation ...

  6. linux驱动程序开发指南-字符驱动介绍

    概述: 在linux系统中设备驱动程序通常是作为应用层和设备层的中间层软件,驱动程序的主要功能是实现应用层访问硬件设备的具体操作接口,通过调用驱动程序,上层应用程序可以采用统一的接口访问各种硬件设备. ...

  7. Keyboard驱动介绍

     Keyboard驱动介绍 最近手里面没啥事,就想看看一些Driver的MDD层. 以前改过Keyboard Driver的PDD层,但是对它的MDD层还真是一片空白,这两天随便看了看Keyboard ...

  8. arduino 步进电机驱动库_一文看懂arduino驱动uln2003操作步进电机的方法

    arduino驱动uln2003操作步进电机的方法 1.网上买的步进电机,很多接线顺序都不对.经过不懈努力查资料,终于找到了能用的接线方式: 电机上的12345针脚,对应着接线端子的42135. 2. ...

  9. OpenHarmony音频驱动介绍

    OpenHarmony官方音频驱动介绍文档路径: https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driv ...

最新文章

  1. OpenCV代码提取:rotate函数的实现
  2. vue案例 - vue-awesome-swiper实现h5滑动翻页效果
  3. 【第二篇】Volley的使用之加载图片
  4. 包钢集团、云南建投、南粤交通等大型国企选择用友BIP 实现财务数智能化
  5. 三数之和为0(c语言实现)(改进)
  6. 2月份Web服务器份额:排名不变 仅Microsoft份额上扬
  7. 理解 Java 核心基础精髓
  8. python中不同类型的数据不能相互运算_Python第三课——数据类型与运算(2)
  9. 星低级格式化工具_Elixir 数据库查询工具 Ecto 讲解
  10. h5直接分享的实现方案
  11. 6. Document close() 方法
  12. 最强的linux命令总结.pdf
  13. 易语言易语言浏览器html5,易语言创建的浏览器源码
  14. 机械制图计算机类实验报告,机械cad实验报告总结
  15. 应用在AVR上的拼音输入法
  16. layui switch使用详解
  17. 洛谷 P1039 侦探推理 题解
  18. MySQL游标无法获取数据-1329 - No data - zero rows fetched, selected, or processed
  19. Unity3D总结记录(四) Unity中控制AudioSourse播放多条不同的声音文件
  20. 计算机丢s7aregsx.dll,打开STEP7 显示:S7aregsx.dll 文件丢失-工业支持中心-西门子中国...

热门文章

  1. c++ opencv 照片清晰度_opencv新手学习————素描视频(C++)
  2. java 边界_Java数组边界问题
  3. python 为什么用%格式化_Python中应该使用%还是format来格式化字符串?
  4. 算法设计与分析 0 算法与性能:GCD与冒泡排序
  5. matlab 注意事项
  6. 庖丁解“学生信息管理系统”
  7. MySQL数据库(十) 一一 数据库的导出和导入
  8. MongoDB副本集的搭建
  9. 7.第一次使用java连接mongodb遇到的问题
  10. 中兴物联笔试和面试随记