一:我在做.net core 应用mongodb的sdk时,查阅了不少资料,故记录下来,以方便查阅。mongodb类库的版本 mongodb driver 2.4.3,一下方法均来自此版本文件
先看看类库的中的几个方法 public static IFindFluentFind (this IMongoCollection collection, FilterDefinition filter, FindOptions options = null);public static UpdateResult UpdateMany (this IMongoCollection collection, Expression > filter, UpdateDefinition update, UpdateOptions options = null, CancellationToken cancellationToken = default(CancellationToken)); 我们看到几个重要的类 UpdateDefinition,FilterDefinition这些是什么,怎么使用?别急看看下面个这个类,就有头绪了
二:Builders
// // 摘要: // A static helper class containing various builders. // // 类型参数: // TDocument: // The type of the document. public static class Builders{ // // 摘要: // Gets a MongoDB.Driver.FilterDefinitionBuilder`1. public static FilterDefinitionBuilder Filter { get; } // // 摘要: // Gets an MongoDB.Driver.IndexKeysDefinitionBuilder`1. public static IndexKeysDefinitionBuilder IndexKeys { get; } // // 摘要: // Gets a MongoDB.Driver.ProjectionDefinitionBuilder`1. public static ProjectionDefinitionBuilder Projection { get; } // // 摘要: // Gets a MongoDB.Driver.SortDefinitionBuilder`1. public static SortDefinitionBuilder Sort { get; } // // 摘要: // Gets an MongoDB.Driver.UpdateDefinitionBuilder`1. public static UpdateDefinitionBuilder Update { get; } }
三:进入UpdateDefinitionBuilder,SortDefinitionBuilder,ProjectionDefinitionBuilder,IndexKeysDefinitionBuilder,FilterDefinitionBuilder这5个类中可以看到,里面包含了各种方法
FilterDefinitionBuilder这个一般用作查询条件 var time = DateTime.Now; var list = new List>(); list.Add(Builders .Filter.Lt("AddTime", time.AddDays(400))); list.Add(Builders .Filter.Gt("AddTime", time)); FilterDefinition filter = Builders .Filter.And(list);
Builders.Filter. 后面包含各种方法,来对查询的条件进行组合
UpdateDefinitionBuilder这个一般用作要修改里 //要修改的字段 var list = new List>(); foreach (var item in t.GetType().GetProperties()) { if (item.Name.ToLower() == "id") continue; list.Add(Builders .Update.Set(item.Name, item.GetValue(t))); } var updatefilter = Builders .Update.Combine(list);
Builders.Update. 后面包含各种方法,来对修改的条件进行组合
剩下的3个方法也一样
四:异步方法的使用
当只有查询条件,没有其他附加条件如排序,制定查询字段时,这2个方法查询出来的结果是一样的
return client.FindAsync(filter).Result.FirstOrDefault(); return await client.Find(filter).FirstOrDefaultAsync(); 当带有其他附加条件时,上面的第一个方法就不可以使用了,必须要要使用第二个方法才行 return await client.Find(filter).Sort(sort).Project(projection).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToListAsync();