MongoDB聚合查询中能否通过$push引入另一查询的结果数据?
你想要的逻辑可以通过单条聚合查询实现,不需要后续循环查库,但不能直接在$group阶段嵌套find操作,MongoDB的聚合阶段不支持直接调用集合查询方法,你需要用$lookup阶段做自关联来实现匹配逻辑。
正确实现写法
db.collectionA.aggregate([ // 第一步:先获取所有field1 + field2的唯一组合 { $group: { _id: { field1: "$field1", field2: "$field2" } } }, // 第二步:自关联当前集合,匹配符合条件的所有记录 { $lookup: { from: "collectionA", let: { groupField1: "$_id.field1", groupField2: "$_id.field2" }, pipeline: [ { $match: { $expr: { $or: [ { $eq: ["$field1", "$$groupField1"] }, { $eq: ["$field2", "$$groupField2"] } ] } } }, // 只提取需要的value字段,不需要可以删除该阶段 { $project: { value: 1, _id: 0 } } ], as: "value" } } ])
效果说明
上述查询返回的结果结构和你原逻辑循环追加后的结构完全一致,每条结果的value数组已经包含了所有匹配对应field1或field2的记录,不需要额外的后续处理。如果原始集合中存在大量无效空值的field1/field2记录,可以在聚合最开头增加$match阶段过滤无效数据,提升查询效率。
内容的提问来源于stack exchange,提问作者Chicky
相关产品推荐
相关产品推荐

