gpt4 book ai didi

用实际文档替换 ObjectId 数组的 MongoDB 聚合

转载 作者:行者123 更新时间:2023-12-04 17:26:53 24 4
gpt4 key购买 nike

假设我们有一个包含一个文档的 db.orders 文档集合:

{"_id": "5ef62e0c586c78491530e4d5", "items": [{ "description": "desc1", "parts": ["5ef62e0c586c78491530e4d7", "5ef62e0c586c78491530e4d8"] } ], "createdBy": "userId"}

[更正:项目字段现在是一个数组]

还有另一个包含两部分文档的 db.parts 集合:

{"_id": "5ef62e0c586c78491530e4d7", "name": "part1" }
{"_id": "5ef62e0c586c78491530e4d8", "name": "part2" }

我想在第一个集合上构造一个聚合,用实际文档替换部件数组中的 ObjectId。结果应该是这样的:

{"_id": "5ef62e0c586c78491530e4d5", "items": [{ "description": "desc1", "parts":
[
{"_id": "5ef62e0c586c78491530e4d7", "name": "part1" },
{"_id": "5ef62e0c586c78491530e4d8", "name": "part2" }
]
}], "createdBy": "userId"}

任何想法将不胜感激!

最佳答案

您需要使用 $lookup运算符(operator):

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" ]
}
}
}
}
}
}
}
}
])

MongoPlayground

关于用实际文档替换 ObjectId 数组的 MongoDB 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62602952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com