Переписать встроенное свойство в поле верхнего уровня для всех документов - PullRequest
0 голосов
/ 08 июня 2018

У меня есть структура, которая выглядит примерно так:

{
   "_id": "xxx",
   "pubDate": {
     "dateTime": ISODate("2018-05-09T10:00:45.0Z"),
     "offset": "Z",
     "zone": "Z"
  }
}

Как я могу изменить pubDate.dateTime внутри вложенного объекта на pubDate

{
   "_id": "xxx",
   "pubDate": ISODate("2018-05-09T10:00:45.0Z")
}

1 Ответ

0 голосов
/ 08 июня 2018

Используйте bulkWrite() с двумя шагами и модификатором обновления $rename:

db.collection.bulkWrite([
  { "updateMany": {
    "filter": { },
    "update": {
      "$rename": { "pubDate.dateTime": "tmpDate" }
    }
  }},
  { "updateMany": {
    "filter": { },
    "update": {
      "$rename": { "tmpDate": "pubDate" }
    }
  }}
])

Это самый быстрый способ переписать все поля подобным образом.Вам нужно выполнить два шага, потому что вы не можете просто записать один уровень в pubDate как свойство, если внутри него что-то уже есть.

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