Zac*_*ane 12 mongodb node.js aggregation-framework
我正在使用 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)
所以我想出了这个...
对于其他感兴趣的人:我的“管道”(过滤器,在我的例子中)需要是一个数组
这有效...
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: {
$and: [
{ "updateDescription.updatedFields.SomeFieldA": { $exists: true } },
{ 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)
| 归档时间: |
|
| 查看次数: |
8484 次 |
| 最近记录: |