MongoDB强制更新

时间:2018-09-04 15:53:34

标签: mongodb debezium

我正在开发一个使用Debezium的应用程序,以将更改从MongoDB流式传输到Kafka集群。 tl; dr-debezium尾随mongo oplog进行文档更改,并将整个文档作为json存储在kafka上。

我们有很多较旧的,过时的生产数据,我们仍然希望按原样保留在Kafka上。为了让Debezium提取文档,它们首先必须出现在OpLog中。本质上,我们需要touch在生产mongo复制集中的每个文档,而不更改该文档上的任何数据。我最初的想法是使用当前内容更新字段:

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

但是,mongo将其视为noop: WriteResult({ "nMatched" : 959, "nUpserted" : 0, "nModified" : 0 })

我的问题是:是否可以在MongoDB中强制进行$set更新,以使上述输出中的nModified的值实际上是959 没有修改任何字段?

请注意:我们将WiredTiger用作后端,因此mongo touch命令对我们不可用。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

Debezium MongoDB连接器将对捕获的集合执行initial sync。因此,无需“触摸”所有文档即可将它们流式传输到Kafka。只有创建了该快照后,连接器才会切换到oplog尾部,以便从那里捕获所有更改。