MongoDB聚合分组后$lookup操作失效问题求助
问题:筛选itemId不唯一的文档并通过$lookup恢复缺失属性失败
需求
筛选出itemId字段值不唯一的文档(仅做筛选操作,不删除集合中的文档)
可正常运行的聚合查询
以下聚合查询可正确完成上述筛选需求:
db.contents.aggregate([ { $match: { $or: [ { $and: [ { widgetId: new ObjectId("648d461dae1b9fb2af57fbb2") }, { value: 'Yes' } ] }, { $and: [ { widgetId: new ObjectId("648d4111ae1b9fb2af57f8f9") }, { value: "40" } ] } ] } }, { $group: { _id: "$itemId", count: { $sum: 1 }, contents: { $push: { _id: "$_id", value: "$value", label: "$label", widgetId: "$widgetId", itemId: "$itemId" } }, } }, { $match: { count: { $gte: 2 } } }, { $unwind: "$contents" }, { $group: { _id: "$contents._id", label: { "$first": "$contents.label" }, value: { "$first": "$contents.value" }, widgetId: { "$first": "$contents.widgetId" }, itemId: { "$first": "$contents.itemId" } } } ])
查询返回结果
上述查询的返回结果如下:
[{ _id: ObjectId("648d5199221f77c425aac223"), label: 'Featured Product', value: 'Yes', widgetId: ObjectId("648d461dae1b9fb2af57fbb2"), itemId: ObjectId("648d5199221f77c425aac21a") }, { _id: ObjectId("648d5131221f77c425aac1b7"), label: 'Discount', value: '40', widgetId: ObjectId("648d4111ae1b9fb2af57f8f9"), itemId: ObjectId("648d5131221f77c425aac1b0") }, { _id: ObjectId("648d5131221f77c425aac1b9"), label: 'Featured Product', value: 'Yes', widgetId: ObjectId("648d461dae1b9fb2af57fbb2"), itemId: ObjectId("648d5131221f77c425aac1b0") }, { _id: ObjectId("648d50d3221f77c425aac160"), label: 'Discount', value: '40', widgetId: ObjectId("648d4111ae1b9fb2af57f8f9"), itemId: ObjectId("648d50d3221f77c425aac146") }, { _id: ObjectId("648d50d3221f77c425aac162"), label: 'Featured Product', value: 'Yes', widgetId: ObjectId("648d461dae1b9fb2af57fbb2"), itemId: ObjectId("648d50d3221f77c425aac146") }, { _id: ObjectId("648d5199221f77c425aac221"), label: 'Discount', value: '40', widgetId: ObjectId("648d4111ae1b9fb2af57f8f9"), itemId: ObjectId("648d5199221f77c425aac21a") }]
问题:添加$lookup后查询无法正常工作
尝试在查询末尾添加$lookup操作,从同集合中恢复文档缺失的属性,但查询无法正常运行:
db.contents.aggregate([ // 上述原有聚合阶段 { $lookup: { from: "contents", localField: "itemId", foreignField: "itemId", as: "contents" } } ])
补充:待关联的文档示例
以下是尝试通过$lookup关联的补充文档示例:
{ "_id": { "$oid": "648d5199221f77c425aac21d" }, "widgetType": "input", "label": "Name", "itemId": { "$oid": "648d5199221f77c425aac21a" }, "formId": { "$oid": "648d4111ae1b9fb2af57f8f5" }, "slug": "name", "value": "FITTED DRESS", "trashed": "false", "status": 1, "widgetId": { "$oid": "648d4111ae1b9fb2af57f8f7" }, "createdAt": { "$date": "2023-06-17T06:24:25.417Z" }, "updatedAt": { "$date": "2023-06-19T14:07:42.600Z" }, "disabled": "false" }, { "_id": { "$oid": "648d5199221f77c425aac21e" }, "widgetType": "input", "label": "Slug", "itemId": { "$oid": "648d5199221f77c425aac21a" }, "formId": { "$oid": "648d4111ae1b9fb2af57f8f5" }, "slug": "slug", "value": "fitted-dress", "trashed": "false", "status": 1, "widgetId": { "$oid": "648d419bae1b9fb2af57f967" }, "createdAt": { "$date": "2023-06-17T06:24:25.417Z" }, "updatedAt": { "$date": "2023-06-19T14:07:42.600Z" }, "disabled": "false" }, { "_id": { "$oid": "648d5199221f77c425aac21f" }, "widgetType": "input", "label": "Price", "itemId": { "$oid": "648d5199221f77c425aac21a" }, "formId": { "$oid": "648d4111ae1b9fb2af57f8f5" }, "slug": "price", "value": "174", "trashed": "false", "status": 1, "widgetId": { "$oid": "648d4111ae1b9fb2af57f8f8" }, "createdAt": { "$date": "2023-06-17T06:24:25.417Z" }, "updatedAt": { "$date": "2023-06-19T14:07:42.600Z" }, "disabled": "false" }
内容的提问来源于stack exchange,提问作者user3384985
相关产品推荐
相关产品推荐

