我有一些产品文档,如下所示:
{
_id: "some-id",
name: "one",
variations: [{
_id: "some-other-id",
some: "data"
}]
}
我想要的是在使用聚合管道检索产品时将
variations
上的“_id”替换为“id”,但我无法弄清楚这一点。我可以在外部文档上执行此操作,但不能在嵌套文档数组上执行此操作。这是我所拥有的:
Product.aggregate([
matchObj,
{$addFields: {
id: "$_id",
"variations.id": "$variations._id"
}},
{$project: {
_id: 0,
"variations._id": 0
}}
])
这几乎有效。问题是“variation.id”最终成为一个包含单个项目 _id 的数组。我怎样才能在变体对象上将
_id
替换为 id
?
MongoDB 中的每个文档都必须有一个
_id
字段。如果未提供,它将自动生成(根据官方文档)。不确定为什么要删除/替换它,但您可以在聚合管道中的单个 $set
阶段中执行以下操作:
_id
的值设置为 $$REMOVE
。这将删除聚合结果中的 _id
字段$map
迭代 variations
数组并指定不带 _id
db.collection.aggregate([
{
"$match": {
// your match here
}
},
{
"$set": {
"_id": "$$REMOVE",
"variations": {
"$map": {
"input": "$variations",
"as": "v",
"in": {
"id": "$$v._id",
"some": "$$v.some"
}
}
}
}
}
])