MongoDB聚合中如何仅返回主集合所有字段(无需逐个指定)
解决MongoDB聚合仅返回主集合所有字段的方案
针对你在聚合中使用$lookup关联集合后,想要仅返回FirstCollection所有字段的需求,不用逐个指定$project的键,有两种高效方案:
方案1:通过$project排除关联生成的字段
$lookup会将关联结果存储在你指定的as字段中(比如示例中假设你设置了as: "second_docs"),只需在聚合阶段最后添加$project排除该字段即可保留主集合的所有原始字段:
dataStore.FirstCollection.aggregate([ { '$lookup': { 'from': 'SecondCollection', // 其他lookup参数... 'as': 'second_docs' // 你指定的关联结果存储字段 } }, {'$match': {...}}, // 你的过滤条件 {'$project': {'second_docs': 0}} // 排除关联字段 ])
方案2:用$set+$replaceWith还原原始文档
先将FirstCollection的原始文档暂存到一个字段,完成关联和过滤后,替换回原始文档:
dataStore.FirstCollection.aggregate([ {'$set': {'original_doc': '$$ROOT'}}, // 暂存原始文档 { '$lookup': { 'from': 'SecondCollection', // 其他lookup参数... 'as': 'second_docs' } }, {'$match': {...}}, // 你的过滤条件 {'$replaceWith': '$original_doc'} // 替换为原始文档,丢弃关联字段 ])
这个方案无需关心关联字段的名称,适用于不确定或不想维护关联字段名的场景,需MongoDB 4.2及以上版本支持$replaceWith(低版本可使用$replaceRoot: {newRoot: "$original_doc"}替代)。
内容的提问来源于stack exchange,提问作者Nikita Polevoy
相关产品推荐
相关产品推荐

