来源: MongoDB for .Net Core 查询条件之 Builders类 – hahaMan – 博客园
使用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();