假设我们有这个db.orders文档集合和一个文档:
{"_id": "5ef62e0c586c78491530e4d5", "items": [{ "description": "desc1", "parts": ["5ef62e0c586c78491530e4d7", "5ef62e0c586c78491530e4d8"] } ], "createdBy": "userId"}
[更正:项目字段现在是一个数组]
另一个db.parts集合包含两个部分文档:
{"_id": "5ef62e0c586c78491530e4d7", "name": "part1" }
{"_id": "5ef62e0c586c78491530e4d8", "name": "part2" }
我想在第一个集合上构建一个聚合,用实际的文档替换parts数组中的ObjectId。结果应为:
{"_id": "5ef62e0c586c78491530e4d5", "items": [{ "description": "desc1", "parts":
[
{"_id": "5ef62e0c586c78491530e4d7", "name": "part1" },
{"_id": "5ef62e0c586c78491530e4d8", "name": "part2" }
]
}], "createdBy": "userId"}
任何想法将不胜感激!
您需要使用$ lookup运算符:
db.orders.aggregate([
{
$lookup: {
from: "parts",
localField: "items.parts",
foreignField: "_id",
as: "parts"
}
},
{
$project: {
createdBy: 1,
items: {
$map: {
input: "$items",
as: "item",
in: {
description: "$$item.description",
parts: {
$filter: {
input: "$parts",
as: "part",
cond: {
$in: [ "$$part._id", "$$item.parts" ]
}
}
}
}
}
}
}
}
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句