You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中MongoDB多分组子集查询实现方法咨询

解决MongoDB多分组子集查询的C#代码修改方案

当前代码的问题在于,把所有分组的条件合并成了一个And逻辑,导致多分组查询时变成了同时满足所有分组的条件,而不是满足任意一个分组的条件。正确的逻辑应该是:每个分组内的层级条件(国家/城市/地区)用And关联,多个分组之间用Or关联。

修改后的代码如下:

public async Task<List<List<ObjectId>>> UsersByGroupIdV3(List<List<string>> targetGroupses)
{
    // 存储每个分组对应的And过滤条件
    List<FilterDefinition<User>> groupFilters = new List<FilterDefinition<User>>();
    
    foreach (var targetGroups in targetGroupses)
    {
        List<FilterDefinition<User>> singleGroupConditions = new List<FilterDefinition<User>>();
        
        // 构建单个分组内的条件(And逻辑)
        if (targetGroups[0] != "allcountry")
        {
            singleGroupConditions.Add(Builders<User>.Filter.Eq(x => x.GroupIds[0], new ObjectId(targetGroups[0])));
        }
        if (targetGroups[1] != "allCity")
        {
            singleGroupConditions.Add(Builders<User>.Filter.Eq(x => x.GroupIds[1], new ObjectId(targetGroups[1])));
        }
        if (targetGroups[2] != "allDistrict")
        {
            singleGroupConditions.Add(Builders<User>.Filter.Eq(x => x.GroupIds[2], new ObjectId(targetGroups[2])));
        }
        
        // 如果当前分组有有效条件,就加入到分组过滤器列表
        if (singleGroupConditions.Any())
        {
            groupFilters.Add(Builders<User>.Filter.And(singleGroupConditions));
        }
    }
    
    // 多个分组条件用Or组合
    var match = groupFilters.Any() ? Builders<User>.Filter.Or(groupFilters) : Builders<User>.Filter.Empty;
    
    var users = await _userRepository.Find(match);
    
    var group = users.Result.Select(i => i.GroupIds);
    return group.ToList();
}

关键修改点说明

  • 新增singleGroupConditions列表,用于存储单个分组内的所有过滤条件,每个分组内的条件用And组合,确保该分组的层级条件同时满足。
  • 用groupFilters列表收集每个分组的And条件,最后将这些分组条件用Or组合,实现「满足任意一个分组即可匹配」的查询逻辑。
  • 增加空判断:如果某个分组没有有效条件(比如全选了allcountry/allCity/allDistrict),则跳过该分组;如果所有分组都无有效条件,返回空过滤器(匹配所有数据)。

内容的提问来源于stack exchange,提问作者Mehmet Ceylan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:35:14