MongoDB Изменить потоки событий: заменить или обновить? - PullRequest
0 голосов
/ 25 марта 2019

Я проверил документ https://docs.mongodb.com/manual/reference/change-events/

Я не уверен, когда именно происходят события "заменить" и "обновить".

Например, когда я использую MongoDB Compass для изменения 1поле документа, я ожидал, что событие «обновление» сработает, но когда я зарегистрировал событие, оно «заменить».

Так что, если ожидаемое обновление на самом деле событие «заменить», когда произойдет реальное«Обновление» событий пожара?

Спасибо.

1 Ответ

0 голосов
/ 26 марта 2019

В двух словах, событие update - это обновление документа без его замены.Событие replace возникает при создании нового документа, заменяющего старый.

Простой пример:

replset:PRIMARY> db.test.find()
{
  "_id": 0,
  "txt": "qwerty"
}

Выполнение результатов update:

replset:PRIMARY> db.test.update({_id:0}, {$set:{txt:'abc'}})

в этом событии изменений потока:

{ _id:
   ....
  operationType: 'update',
   ....

Выполнение save:

replset:PRIMARY> db.test.save({_id:0, txt:'qwerty'})

приводит к этому событию изменения потока:

{ _id:
   ....
  operationType: 'replace',
   ....

При обновлении документа в Compassпривело к событию replace, что означает, что Compass выполняет save операцию в фоновом режиме вместо update.Это имело бы смысл с точки зрения графического интерфейса, так как save измененный документ легче вместо того, чтобы проверять разницу между старым документом и новым и создавать специальный запрос update с определенным$set операция, которая будет дорогой для вычисления.

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