PyMongo如何基于另一集合的字段值查询目标集合文档且无需关联拼接
MongoDB单查询获取用户所属问卷的最优方案
你可以直接调整聚合查询的主集合为users,配合$replaceRoot操作符直接返回纯净的surveys原始文档,无需手动排除关联字段,查询逻辑如下:
const qry = [ // 第一步:精准匹配目标用户,只需扫描单条用户记录 { $match: { username: "jdoe" } }, // 第二步:关联surveys集合拉取同groupId的所有问卷 { $lookup: { from: "surveys", // 注意此处要和你的surveys集合名完全匹配 localField: "groupId", foreignField: "groupId", as: "survey_list" } }, // 第三步:展开问卷数组为单条记录 { $unwind: "$survey_list" }, // 第四步:直接将问卷文档设为返回根节点,无任何多余字段 { $replaceRoot: { newRoot: "$survey_list" } } ]
方案优势
- 性能更高:第一步先通过
$match过滤出单条用户记录,后续仅需关联该用户groupId对应的问卷,无需全量扫描surveys集合 - 输出完全符合要求:返回结果就是surveys集合的原始文档,不需要额外做字段排除,也不会残留任何用户关联数据
- 仅做一次数据库请求,符合你减少请求次数的要求
注意:如果一个用户可能没有对应的问卷,可在
$unwind中加入preserveNullAndEmptyArrays: true参数避免无结果时报错。
内容的提问来源于stack exchange,提问作者Ozymandias
相关产品推荐
相关产品推荐

