首页 > 解决方案 > 如何在mongodb的所有文档中向子文档数组中添加一个字段?

问题描述

我有如下收藏:-

{
   _id: 123,
   images: [{
     _id: ObjectId("213"),
     id: "1"
   }]
}

我想添加一个imageResourceID依赖于该字段的id字段。

{
   _id: 123,
   images: [{
     _id: ObjectId("213"),
     id: "1",
     imageResourceID: "1"
   }]
}

我试过什么?

db.collection.aggregate([
  { "$addFields": {
    "images.imageResourceID": {
        "$map": {
        "input": "$otherImages",
        "as": "image",
        "in": "$$image.id"
      }
    }
  }}
])

它将字段添加为包含所有子文档字段imageResourceID的数组。id如何使它添加imageResourceID具有等于该字段的值的id字段?

提前致谢。我是新手,MongoDB所以请多多包涵。

标签: mongodbaggregation-framework

解决方案


您需要循环images使用字段,$map并且需要在聚合in表达式中指定每个字段$map,最后使用$out聚合将它们写入另一个集合。

db.collection.aggregate([
  { "$addFields": {
    "images": {
      "$map": {
        "input": "$images",
        "as": "image",
        "in": {
          "_id": "$$image._id"
          "id": "$$image.id",
          "imageResourceID": "$$image.id"
        }
      }
    }
  }},
  { "$out": "<output-collection>" }
])

推荐阅读