zoukankan      html  css  js  c++  java
  • MongoDB for .Net Core 查询条件之 Builders类

    使用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();


  • 相关阅读:
    通达OA 新旧两种数据库连接方式
    c++ 如何获取系统时间
    性能测试开源小工具——http_load介绍
    http_load安装与测试参数分析
    不错的C++框架: Thrift(2)-传输和网络相关
    管理处理器的亲和性(affinity)
    300元内,此耳机是首选。不亏千人好评,对的起你的耳朵。
    [品质生活] 舒适 Schick HYDRO 5剃须刀
    巴氏刷牙法_百度百科
    Amazon.com : The Odyssey of the Manual Toothbrusher
  • 原文地址:https://www.cnblogs.com/shiyilang398/p/11339009.html
Copyright © 2011-2022 走看看