因此,我想使用Mongodb更改流来监视特定数据集的更新。
例如喜欢
await Match.updateOne({matchId: 79949451}, {$set: {statusType: 'inprogress'}}).exec();
const pipeline = [{ $match: { matchId: 79949451}}];
Match.watch(pipeline).on('change', data => console.log(data));
await Match.updateOne({matchId: 79949451}, {$set: {statusType: 'finished'}}).exec();
这似乎不起作用。 StatusType得到更新,但是我没有得到日志。
但是如果我删除了管道,我会看到日志
await Match.updateOne({matchId: 79949451}, {$set: {statusType: 'inprogress'}}).exec();
Match.watch().on('change', data => console.log(data));
await Match.updateOne({matchId: 79949451}, {$set: {statusType: 'finished'}}).exec();
据我了解和了解,管道仅适用于更新的字段,与fullDocument
有关。
我如何才能使其正常工作?有什么简单的我想念的吗?
答案 0 :(得分:1)
您的$match
应该是这样的:
const pipeline = [{ $match: { 'fullDocument.matchId': 79949451}}];
由于change stream output与直接查询操作的输出不同,因此必须通过fullDocument
引用文档字段。不要忘记将{fullDocument: 'updateLookup'}
添加到监视选项。
Match.watch(pipeline, {fullDocument: 'updateLookup'}).on(...
注意:对于不熟悉此语法的任何人,OP都在使用Mongoose.js。