MongoDB的操作

分页查询集合(表)

  • 动态条件查询
  • 查询文档指定字段
  • 排序
  • 分页

定义查询操作

FilterDefinition<UserInfo> filter = _buildFilter.Empty;

查询条件由查询条件构造器构建,这个地方网上很多示例写的有bug,当查询所有集合(表)数据的时候,filter = null 在转换的时候会抛出异常

//创建查询条件构造器
FilterDefinitionBuilder<UserInfo> _buildFilter = Builders<UserInfo>.Filter;
//定义查询条件
FilterDefinition<UserInfo> filter = null;
if(!string.IsNullOrEmpty(request.Name)) filter = _buildFilter.Eq(m => m.Name, request.Name);

还有很多种类型的构造器,对应不同的操作

//排序操作
SortDefinition<UserInfo> sort
//排序构造器
Builders<UserInfo>.Sort

修改操作
UpdateDefinition<UserInfo> update
//修改构造器
Builders<UserInfo>.Update

完整的查询示例,比较麻烦的地方,是针对数组的条件查询,如果嵌套的层数比较多,查询也是同理的套娃查询

public class GetUserListRequest
{
    /// <summary>
    /// 名称
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// 年龄
    /// </summary>
    public int? Age { get; set; }


    /// <summary>
    /// 创建时间
    /// </summary>
    public DateTime CreateTime { get; set; }

    /// <summary>
    /// 合作伙伴
    /// </summary>
    public Partner PartnerList { get; set; }

    /// <summary>
    /// 信息
    /// </summary>
    public Info Info { get; set; }
}

public async Task<List<UserInfo>> GetUserPageList(GetUserListRequest request)
{
    if (request == null) return new List<UserInfo>();
    FilterDefinition<UserInfo> filter = _buildFilter.Empty;

    SortDefinition<UserInfo> sort = Builders<UserInfo>.Sort.Ascending(m => m.Age);

    if (!string.IsNullOrEmpty(request.Name))
    {
        filter = _buildFilter.Eq(m => m.Name, request.Name);
    }
    if (request.Age.HasValue)
    {
        filter = _buildFilter.Eq(m => m.Age, request.Age);
    }
    if (request.PartnerList != null)
    {
        if (request.PartnerList.Status.HasValue)
        {
            filter = _buildFilter.ElemMatch("PartnerList", Builders<Partner>.Filter.Eq(m => m.Status, request.PartnerList.Status));
        }
    }
    if (request.Info != null)
    {
        if (!string.IsNullOrEmpty(request.Info.Code))
        {
            filter = _buildFilter.Eq(m => m.Info.Code, request.Info.Code);
        }
    }
    var list = await _userInfoRepertoty.FindListByPageAsync(filter,1,3, new string[] { "Name","Age", "CreateTime" }, sort);
    return list;
}

动态条件查询(查询全部)

var list = await _userInfoRepertoty.FindListByPageAsync(filter, 1, 30);

在这里插入图片描述

条件查询,排序,分页,查询指定字段
var list = await _userInfoRepertoty.FindListByPageAsync(filter,1,3, new string[] { "Name","Age", "CreateTime" }, sort);

在这里插入图片描述
除了使用对象模型进行操作,也可以直接使用mongodb原生的BsonDocument进行操作

var buildFilter = Builders<BsonDocument>.Filter;
FilterDefinition<BsonDocument> filter = _buildFilter.Empty;;
BsonDocument bson = new BsonDocument
{
    { "Age",20},
    {"Info.Status",3 }
};

foreach (var bs in bson)
{
    filter = _buildFilter.Eq(bs.Name, bs.Value);

}
var sort = Builders<BsonDocument>.Sort;
var list = await collection.Find(filter).Sort(sort.Descending("age")).ToListAsync();

修改集合(表)的数据

  • 修改满足条件的文档
  • 修改文档的部分字段
public async Task UpdateUserInfo()
{
    //修改条件
    FilterDefinition<UserInfo> filter = _buildFilter.Empty;
    filter = _buildFilter.Eq(m => m.Name, "tibos");
    filter = _buildFilter.ElemMatch(list => list.PartnerList, child => child.Status == 1);


    //修改字段
    var update = Builders<UserInfo>.Update.Set("Age",100).Set("PartnerList.$.Name", "ppp").Set("PartnerList.$.Status", "");
    await _userInfoRepertoty.UpdateManayAsync(update, filter);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值