参考链接: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); // 连接地址MongoDBConnStr,DBName库名
添加
// 单个添加
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);