在嵌套文档数组中将“_id”替换为“id”

问题描述 投票:0回答:1

我有一些产品文档,如下所示:

{
    _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 mongoose
1个回答
0
投票

MongoDB 中的每个文档都必须有一个

_id
字段。如果未提供,它将自动生成(根据官方文档)。不确定为什么要删除/替换它,但您可以在聚合管道中的单个
$set
阶段中执行以下操作:

  1. _id
    的值设置为
    $$REMOVE
    。这将删除聚合结果中的
    _id
    字段
  2. $map
    迭代
    variations
    数组并指定不带
    _id
  3. 的项目
db.collection.aggregate([
  {
    "$match": {
      // your match here
      
    }
  },
  {
    "$set": {
      "_id": "$$REMOVE",
      "variations": {
        "$map": {
          "input": "$variations",
          "as": "v",
          "in": {
            "id": "$$v._id",
            "some": "$$v.some"
          }
        }
      }
    }
  }
])

蒙戈游乐场

© www.soinside.com 2019 - 2024. All rights reserved.