我正在使用 mongodb 的节点驱动程序在具有许多连续更新的字段的文档上启动更改流(通过插入/更新端的某些逻辑调用$set仅包含更改的字段),但我想仅监视特定字段的更改。我目前对此的尝试如下,但即使该字段不是更新的一部分,我也只会获得每次更新。
我认为“updateDescription.updatedFields”是我所追求的,但到目前为止我拥有的代码只是给了我所有的更新。
正确的 $match 过滤器会是什么样子来实现这样的目标?我想也许检查它是否是 $gte:1 可能是让它工作的黑客,但我仍然只是得到每个更新。我试过 $inc 来查看字段名称是否也在“updatedFields”中,但这似乎也不起作用。
const MongoClient = require('mongodb').MongoClient;
const uri = 'mongodb://localhost:27017/?replicaSet=rs0';
MongoClient.connect(uri, function(err, client) {
const db = client.db('mydb');
// Connect using MongoClient
var filter = {
$match: {
"updateDescription.updatedFields.SomeFieldA": { $gte : 1 },
operationType: 'update'
}
};
var options = { fullDocument: 'updateLookup' };
db.collection('somecollection').watch(filter, options).on('change', data => {
console.log(new Date(), data);
});
});
Run Code Online (Sandbox Code Playgroud)