Я бы хотел использовать потоки MongoDB для запуска события каждый раз, когда в коллекцию вставляется определенный тип данных.
Я уже нашел что-то примерно похожее на то, что я ищу, ноэто работает только для потоков изменений, а не для вставок.
Есть идеи, как мне это сделать?
Я использую Mongodb драйвер с Nodejs чтобы это сделать, мой код будет выглядеть примерно так:
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);
}
}