Переименовать поле из массива для всех документов коллекции - MongoDB - PullRequest
0 голосов
/ 10 января 2020

У меня есть документ, подобный следующему

[
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"Alex",
    "Descriptions" : [ 
        {
            "Name" : "Descr1",
            "Items" : [ 
                {
                    "ItemsType" : {
                        "_id" : 1,
                        "Name" : ""
                    },
                    "Field1" : 1,
                    "Field2" : null
                }, 
                {
                    "ItemsType" : {
                        "_id" : 2,
                        "Name" : ""
                    },
                    "Field1" : 1,
                    "Field2" : null
                }, 
                {
                    "ItemsType" : {
                        "_id" : 3,
                        "Name" : ""
                    },
                    "Field1" : 1,
                    "Field2" : null
                }
            ]
        }
    ],
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
    "LegalEntityIdentifier" : "",
  }, 
  ...
]

Как переименовать поля массива с путем «Describ.Items.ItemType» в новое имя «Describ.Items.Type» для всех документов коллекции?

1 Ответ

3 голосов
/ 10 января 2020

Вам необходимо использовать $map оператор

db.collection.aggregate([
  {
    $addFields: {
      Descriptions: {
        $map: {
          input: "$Descriptions",
          as: "desc",
          in: {
            $map: {
              input: "$$desc.Items",
              as: "item",
              in: {
                Field1: "$$item.Field1",
                Field2: "$$item.Field2",
                Type: "$$item.ItemsType"
              }
            }
          }
        }
      }
    }
  }
])

MongoPlayground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...