【发布时间】:2019-02-09 17:02:14
【问题描述】:
我正在开发一个使用 Debezium 将更改从 MongoDB 流式传输到 Kafka 集群的应用程序。 tl;dr - debezium 跟踪 mongo oplog 以更改文档并将整个 doc 存储在 kafka 上作为 json。
我们有一堆旧的、陈旧的生产数据,我们仍然希望按原样保留在 Kafka 上。为了让 Debezium 提取文档,它们首先必须出现在 OpLog 中。本质上,我们需要 touch 生产 mongo replset 中的每个文档,而不更改文档上的任何数据。我最初的想法是用当前内容更新一个字段:
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 命令。
感谢您的帮助!
【问题讨论】: