【发布时间】:2019-05-06 04:35:20
【问题描述】:
我想在每次将特定类型的数据插入集合时使用 MongoDB 流来触发事件。
我已经找到了与我正在寻找的内容大致相似的东西,但这仅适用于更改流而不是插入。
知道如何完成这项工作吗?
我正在使用带有 Nodejs 的 Mongodb 驱动程序来完成这项工作,因此我的代码将是这样的:
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: {
$or: [
{ $or: [{"receipt.receiver": "newdexpocket"}, {"act.account": "newdexpocket"}] }]
}
}];
var options = { fullDocument: 'updateLookup' };
db.collection('somecollection').watch(filter, options).on('create', data =>
{
console.log(data);
});
});
- 是否需要在过滤器中指定
operationType? - 我还需要获取完整文档,但显然
updateLookup不是正确的工具,我应该使用什么? -
on事件可以使用哪些选项?我用过create,但我什至不确定它是否存在,是吗?
很抱歉所有这些问题,但我很难在官方文档中找到一些答案。
解决方案:
请注意不要在您的请求中忘记fullDocument ;-)
function watch_insert(con, db, coll) {
console.log(new Date() + ' watching: ' + coll);
const insert_pipeline = [ { $match:
{
operationType: 'insert',
$or: [
{ "fullDocument.receipt.receiver": "newdexpocket" },
{ "fullDocument.act.account": "newdexpocket" }
]
}
}];
con.db(db).collection(coll).watch(insert_pipeline)
.on('change', data => {
console.log(data)
});
}
async function run(uri) {
try {
con = await MongoClient.connect(uri, {"useNewUrlParser": true});
watch_insert(con, 'EOS', 'action_traces');
} catch (err) {
console.log(err);
}
}
【问题讨论】:
标签: node.js mongodb mongodb-query