Принудительное обновление MongoDB

Я работаю над приложением, которое использует Debezium для потоковой передачи изменений из MongoDB в кластер Kafka. tl; dr — debezium следит за оплогом mongo для изменений в документе и сохраняет весь документ на kafka как json.

У нас есть куча старых, устаревших данных о производстве, которые мы все еще хотели бы сохранить в Kafka как есть. Чтобы документы были получены Debezium, они сначала должны появиться в OpLog. По сути, нам нужно touch каждый документ в нашем производственном наборе mongo replset без изменения каких-либо данных в документе. Моя первоначальная мысль состояла в том, чтобы обновить поле с его текущим содержимым:

db.contributors.update(
  {},
  {
    $set: {
      "meta.collectionName": "contributors"
    }
  },
  { multi: true}
)

Однако монго рассматривает это как noop: WriteResult({ "nMatched" : 959, "nUpserted" : 0, "nModified" : 0 })

Мой вопрос: возможно ли принудительно обновить $set в MongoDB, чтобы значение nModified в приведенном выше выводе было 959 без фактического изменения каких-либо полей?

Одно замечание: мы используем WiredTiger в качестве нашего бэкенда, поэтому команда mongo touch нам недоступна.

Спасибо за помощь!


person jpavs    schedule 04.09.2018    source источник


Ответы (1)


Коннектор Debezium MongoDB выполнит начальную синхронизацию захваченных коллекций. Таким образом, нет необходимости «трогать» все документы, чтобы передать их в Kafka. Только после того, как этот моментальный снимок будет создан, коннектор переключится на оплог-хвост, чтобы зафиксировать все изменения с этого момента.

person Gunnar    schedule 07.09.2018