一:我在做.net core 應用mongodb的sdk時,查閱了不少資料,故記錄下來,以方便查閱。mongodb類庫的版本 mongodb driver 2.4.3,一下方法均來自此版本文件
先看看類庫的中的幾個方法
public static IFindFluent<TDocument, TDocument> Find<TDocument>(this IMongoCollection<TDocument> collection, FilterDefinition<TDocument> filter, FindOptions options = null); public static UpdateResult UpdateMany<TDocument>(this IMongoCollection<TDocument> collection, Expression<Func<TDocument, bool>> filter,
UpdateDefinition<TDocument> 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<TDocument> { // // 摘要: // Gets a MongoDB.Driver.FilterDefinitionBuilder`1. public static FilterDefinitionBuilder<TDocument> Filter { get; } // // 摘要: // Gets an MongoDB.Driver.IndexKeysDefinitionBuilder`1. public static IndexKeysDefinitionBuilder<TDocument> IndexKeys { get; } // // 摘要: // Gets a MongoDB.Driver.ProjectionDefinitionBuilder`1. public static ProjectionDefinitionBuilder<TDocument> Projection { get; } // // 摘要: // Gets a MongoDB.Driver.SortDefinitionBuilder`1. public static SortDefinitionBuilder<TDocument> Sort { get; } // // 摘要: // Gets an MongoDB.Driver.UpdateDefinitionBuilder`1. public static UpdateDefinitionBuilder<TDocument> Update { get; } }
三:進入UpdateDefinitionBuilder,SortDefinitionBuilder,ProjectionDefinitionBuilder,IndexKeysDefinitionBuilder,FilterDefinitionBuilder這5個類中可以看到,里面包含了各種方法
FilterDefinitionBuilder這個一般用作查詢條件 var time = DateTime.Now; var list = new List<FilterDefinition<PhoneEntity>>(); list.Add(Builders<PhoneEntity>.Filter.Lt("AddTime", time.AddDays(400))); list.Add(Builders<PhoneEntity>.Filter.Gt("AddTime", time)); FilterDefinition<PhoneEntity> filter = Builders<PhoneEntity>.Filter.And(list);
Builders<PhoneEntity>.Filter. 后面包含各種方法,來對查詢的條件進行組合
UpdateDefinitionBuilder這個一般用作要修改里 //要修改的字段 var list = new List<UpdateDefinition<T>>(); foreach (var item in t.GetType().GetProperties()) { if (item.Name.ToLower() == "id") continue; list.Add(Builders<T>.Update.Set(item.Name, item.GetValue(t))); } var updatefilter = Builders<T>.Update.Combine(list);
Builders<PhoneEntity>.Update. 后面包含各種方法,來對修改的條件進行組合
剩下的3個方法也一樣
四:異步方法的使用
當只有查詢條件,沒有其他附加條件如排序,制定查詢字段時,這2個方法查詢出來的結果是一樣的
return client.FindAsync(filter).Result.FirstOrDefault();
return await client.Find(filter).FirstOrDefaultAsync();
當帶有其他附加條件時,上面的第一個方法就不可以使用了,必須要要使用第二個方法才行
return await client.Find(filter).Sort(sort).Project<T>(projection).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToListAsync();