MongoDB Shell - Добавить новое поле ко всем документам из существующего поля - PullRequest
1 голос
/ 24 марта 2020

Я хочу создать TTL для всех существующих документов в коллекции, у нас есть поле во всем документе в виде типа String - "OrigDate": "2020-03-24"

Теперь я хочу добавить еще одну поданную "updatedAt" на основе В этом поле я попробовал приведенное ниже в оболочке mon go, но не работал -

db.SHOP.update(
    {},
    {
     $set:{
            "updatedAt": { "$toDate": "$OrigDate"}
        }
    },
    false,
    true
)

Это дает следующее исключение - Поле с префиксом $ ($) '$ toDate' в 'updatedAt. $ toDate 'не подходит для хранения

Пожалуйста, помогите

1 Ответ

0 голосов
/ 24 марта 2020

Используйте агрегацию, чтобы создать новое поле из существующего значения поля, а затем обновите его до коллекции. Вы должны использовать агрегацию для ссылки на существующее поле из документа коллекции.

db.test.aggregate( [
  { $addFields: { updatedAt: { "$toDate": "$OrigDate"} } }
] ).forEach( doc => db.test.updateOne( { _id: doc._id }, { $set: { updatedAt: doc.updatedAt } } ) )

Это следующее обновление принимает конвейер агрегации для указания изменений, которые будут применены к документам коллекции: Обновление с помощью Агрегационный трубопровод . Обратите внимание, что эта функция доступна только в MongoDB версии 4.2 или новее.

db.test.updateMany(
  { },
  [
      { $set: { updatedAt: { "$toDate": "$OrigDate"} } }
  ]
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...