MongoDB C#中如何按关联集合字段查询用户数据?
解决方案
你当前的代码仅在User集合内匹配用户名称,没有关联Group集合实现按组名称筛选。要完成需求,需要通过Lookup关联两个集合,再过滤组名称条件。
步骤1:定义聚合结果DTO
首先需要一个包含关联组信息的类,用于接收聚合查询的结果:
public class UserWithGroup { public string Id; public string Name; public string GroupId; public Group Group; }
步骤2:修改聚合查询逻辑
使用Lookup关联Group集合,再筛选组名称为"xyz"的用户:
return userCollection.Aggregate<UserWithGroup>(new AggregateOptions { Collation = new Collation("en", strength: CollationStrength.Primary) }) // 关联Group集合,通过GroupId匹配Group的Id字段 .Lookup( foreignCollection: groupCollection, localField: u => u.GroupId, foreignField: g => g.Id, @as: u => u.Group ) // 过滤出组名称为"xyz"的用户,同时排除无有效组的记录 .Match(u => u.Group != null && u.Group.Name == "xyz") // 可选:如果不需要返回组信息,添加Project只保留User原有字段 // .Project(u => new User { Id = u.Id, Name = u.Name, GroupId = u.GroupId }) .AsExecutable();
关键说明
Lookup操作会将每个用户对应的组数据嵌入到结果对象中,是跨集合关联的核心步骤- Match阶段增加
u.Group != null判断,避免因无效GroupId导致的空引用问题 - 如果不需要返回组信息,可通过
Project阶段裁剪返回字段,只保留User的原有属性
内容的提问来源于stack exchange,提问作者Ekin
相关产品推荐
相关产品推荐

