关于MongoDB在C#的使用

参考链接:https://www.cnblogs.com/wangchuang/p/4518282.html

内容详情(这里仅仅做笔记)

Query.All("name", "a", "b");//通过多个元素来匹配数组
Query.And(Query.EQ("name", "a"), Query.EQ("title", "t"));//同时满足多个条件
Query.EQ("name", "a");//等于
Query.Exists("type", true);//判断键值是否存在
Query.GT("value", 2);//大于>
Query.GTE("value", 3);//大于等于>=
Query.In("name", "a", "b");//包括指定的所有值,可以指定不同类型的条件和值
Query.LT("value", 9);//小于<
Query.LTE("value", 8);//小于等于<=
Query.Mod("value", 3, 1);//将查询值除以第一个给定值,若余数等于第二个给定值则返回该结果
Query.NE("name", "c");//不等于
Query.Nor(Array);//不包括数组中的值
Query.Not("name");//元素条件语句
Query.NotIn("name", "a", 2);//返回与数组中所有条件都不匹配的文档
Query.Or(Query.EQ("name", "a"), Query.EQ("title", "t"));//满足其中一个条件
Query.Size("name", 2);//给定键的长度
Query.Type("_id", BsonType.ObjectId);//给定键的类型
Query.Where(BsonJavaScript);//执行JavaScript
Query.Matches("Title", str);//模糊查询 相当于sql中like  -- str可包含正则表达式

具体使用案列:

private static MongoDatabase _db_handel = MongoServer.Create(MongoDBConnStr).GetDatabase(DBName);  // 连接地址MongoDBConnStrDBName库名

添加

// 单个添加
PBDS_Model PBDSModel = new PBDS_Model(); _db_handel.GetCollection(CollectionNames[3]).Insert(PBDSModel);
// 批量添加
_db_handel.GetCollection(CollectionNames[2]).InsertBatch(models);

查询:

List<string> SoolchList = new List<string>;  // 这里可存放多个包含的可能
List<SubResultDatasT_Model> SubRDTModels = new List<SubResultDatasT_Model>();  // 要转换的模型
List<IMongoQuery> IMQLists = new List<IMongoQuery>();  // 这个用来存放多个条件的临时集合
IMongoQuery query = Query.EQ("TrainSystem", model.TrainSystem);  // 单字段
IMQLists.Add(query);
query = null;
BsonArray _ba = new BsonArray();  // 单字段包含的多个值使用BasonArray
_ba.AddRange(SoolchList);
query = Query.In("UserID", _ba);  // 这里不要使用Query.All我感觉应该和Query.In效果一直,但是结果不是的。搞明白的可以留言评论一下,我好学习学习
IMQLists.Add(query);
query = null;
query = Query.And(IMQLists);  // 且条件
var TRAllDatas = _db_handel.GetCollection(CollectionNames[1]).Find(query).SetLimit(100).SetSkip(10); // 进行分页查询,SetLimit限制查询数量,SetSkip跳过多少条
string TTRAllDatas = RemoveID(TRAllDatas.ToJson()); // 处理数据
SubRDTModels= JsonConvert.DeserializeObject<List<SubResultDatasT_Model>>(TTRAllDatas); // 解析成模型

 更新:

1.这种方式存在效率问题,需要先查找出来在进行更新

#region 查找出来对应的集合
IMongoQuery query = Query.EQ("GUID", GUID);
var TRAllDatas = _db_handel.GetCollection(CollectionNames[1]).Find(query);
SubResultDatasT_Model SubRDTModel
= new SubResultDatasT_Model();
string TTRAllDatas = RemoveID(TRAllDatas.ToJson());
if (string.IsNullOrEmpty(TTRAllDatas))
{
  _ai_dal.Edit_TrainRecord_DAL(GUID);
  return;
}
#endregion
#region 更新对应的数据并更新MongoDB库
SubRDTModel
= JsonConvert.DeserializeObject<SubResultDatasT_Model>(TTRAllDatas);
SubRDTModel.IsNeedRemind
= 0;
BsonDocument _bd
= BsonExtensionMethods.ToBsonDocument(SubRDTModel);
query
= Query.EQ("NewAutoID", SubRDTModel.NewAutoID);
_db_handel.GetCollection(CollectionNames[
1]).Update(query, new UpdateDocument(_bd));
#endregion

2.像数据库一样直接更新字段:(这种方式存在返回值问题,目前获取到的WriteConcernResult返回全为null)

IMongoQuery query = Query.EQ("NewAutoID", "20db1d3ff3284908a195677295636513");
_db_handel.GetCollection("ColJR").Update(query, Update.Set("Score", 80).Set("PreIntegration", 50));

删除

_db_handel.GetCollection(CollectionNames[0]).RemoveAll();  // 删除所有
// 部分删除
IMongoQuery query = Query.EQ("NewAutoID", SubRDTModel.NewAutoID);
_db_handel.GetCollection(CollectionNames[1]).Remove(query);
原文地址:https://www.cnblogs.com/namejr/p/13335924.html