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

使用MongoDB Driver与C#查询GroupMembers中属于People.Groups的UserId

使用MongoDB Driver for C# 筛选符合条件的GroupMembers用户ID

集合数据结构

Post:[{
 PostId:5,
 CreateByUserId:"james",
 Privacy: "People",
 People: {
  Groups:[1,2],
  Friends:["simon","oliver"]
 },
 GroupMembers:[{UserId:"kevin",GroupId: 1},{UserId:"george", GroupId:1},{UserId:"jack",GroupId: 2}]
}]

需求

提取GroupMembers中GroupId存在于当前文档People.Groups列表内的UserId。

实现方式

1. LINQ 查询方式

利用MongoDB Driver的LINQ支持,结合投影操作筛选目标成员:

// 按实际需求设置筛选条件,此处以PostId=5为例
var filter = Builders<Post>.Filter.Eq(p => p.PostId, 5);
var projection = Builders<Post>.Projection
    .ElemMatch(p => p.GroupMembers, member => p.People.Groups.Contains(member.GroupId));

var matchedPost = await mongoCollection.Find(filter).Project(projection).FirstOrDefaultAsync();
// 提取最终的UserId列表
var targetUserIds = matchedPost?.GroupMembers.Select(m => m.UserId).ToList();

2. 聚合管道方式

若需更灵活的复杂操作,可使用聚合管道实现:

var pipeline = new BsonDocument[]
{
    new BsonDocument("$match", new BsonDocument("PostId", 5)),
    new BsonDocument("$project", new BsonDocument
    {
        { "TargetUserIds", new BsonDocument("$map", new BsonDocument
            {
                { "input", new BsonDocument("$filter", new BsonDocument
                    {
                        { "input", "$GroupMembers" },
                        { "as", "member" },
                        { "cond", new BsonDocument("$in", new BsonArray { "$$member.GroupId", "$People.Groups" }) }
                    })
                },
                { "as", "matchedMember" },
                { "in", "$$matchedMember.UserId" }
            })
        }
    })
};

var aggregateResult = await mongoCollection.Aggregate<BsonDocument>(pipeline).FirstOrDefaultAsync();
var targetUserIds = aggregateResult?["TargetUserIds"].AsBsonArray.Select(id => id.AsString).ToList();

内容的提问来源于stack exchange,提问作者Kaveh Naseri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:00:06