使用MongoDB有段時間了 今天終於有用總結下
UpdateDefinitionBuilder,SortDefinitionBuilder,ProjectionDefinitionBuilder,IndexKeysDefinitionBuilder,FilterDefinitionBuilder應用
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; } }
案例:
FilterDefinitionBuilder這個一般用作查詢條件
var builderlist = new List<FilterDefinition<BsonDocument>>(); builderlist.Add(Builders<BsonDocument>.Filter.Gte("EndTime", DateTime.UtcNow)); builderlist.Add(Builders<BsonDocument>.Filter.Eq("Type", BanType.Freeze)); builderlist.Add(Builders<BsonDocument>.Filter.Eq("RoleId", form.RoleId)); var filter = Builders<BsonDocument>.Filter.And(builderlist); //同步 _mongoDbContext.Collection<BsonDocument>().Find(filter).SortByDescending(n => n.EndTime).ToList(); //異步 await _mongoDbContext.Collection<BsonDocument>().Find(filter).SortByDescending(n => n.EndTime).ToListAsync();
UpdateDefinitionBuilder 此類用在修改數據的時候
FilterDefinition<BsonDocument> filter = Builders<BsonDocument>.Filter.Eq("_id", id); var list = new List<UpdateDefinition<BsonDocument>>(); list.Add(Builders<BsonDocument>.Update.Set("EndTime", DateTime.UtcNow.AddDays(day))); list.Add(Builders<BsonDocument>.Update.Set("Operator", new UserSnapshot { Id = UserId, Name = UserName })); list.Add(Builders<BsonDocument>.Update.Set("Remark", Remark)); list.Add(Builders<BsonDocument>.Update.Set("Category", Category)); var setfilter = Builders<BsonDocument>.Update.Combine(list); //同步調用 _mongoDbContext.Collection<BsonDocument>().UpdateOne(filter , setfilter); //異步調用 await _mongoDbContext.Collection<BsonDocument>().UpdateOneAsync(filter , setfilter);
ProjectionDefinitionBuilder 查詢指定的值
//創建約束生成器 FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter; ProjectionDefinitionBuilder<BsonDocument> builderProjection = Builders<BsonDocument>.Projection; //Include 包含某元素 Exclude 不包含某元素 ProjectionDefinition<BsonDocument> projection = builderProjection.Include("RoleId"); var list = await _mongoDbContext.Collection<BsonDocument>().Find(builderFilter.Empty).Project(projection).ToListAsync(); //創建約束生成器 FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter; ProjectionDefinitionBuilder<BsonDocument> builderProjection = Builders<BsonDocument>.Projection; //Include 包含某元素 Exclude 不包含某元素 ProjectionDefinition<BsonDocument> projection = builderProjection.Exclude("RoleId"); _mongoDbContext.Collection<BsonDocument>().Find(builderFilter.Empty).Project(projection).ToListAsync();
SortDefinitionBuilder 排序
FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter; SortDefinitionBuilder<BsonDocument> builderSort = Builders<BsonDocument>.Sort; //排序約束 Ascending 正序 Descending 倒序 SortDefinition<BsonDocument> sort = builderSort.Ascending("RoleId"); SortDefinition<BsonDocument> sort2 = builderSort.Descending("RoleId"); var list = await _mongoDbContext.Collection<BsonDocument>().Find(builderFilter.Empty).Sort(sort).ToListAsync();