Mongodb for .Net Core 驅動的應用


一:我在做.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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM