Как добавить поле в массив поддокументов во всех документах mongodb? - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть коллекция, как показано ниже: -

{
   _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, поэтому, пожалуйста, потерпите меня.

1 Ответ

0 голосов
/ 01 сентября 2018

Необходимо перебрать поле 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>" }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...