如何将观看流定位到有限的数据集?

时间:2019-11-01 07:29:34

标签: mongodb mongoose

因此,我想使用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有关。

我如何才能使其正常工作?有什么简单的我想念的吗?

1 个答案:

答案 0 :(得分:1)

您的$match应该是这样的:

const pipeline = [{ $match: { 'fullDocument.matchId': 79949451}}];

由于change stream output与直接查询操作的输出不同,因此必须通过fullDocument引用文档字段。不要忘记将{fullDocument: 'updateLookup'}添加到监视选项。

Match.watch(pipeline, {fullDocument: 'updateLookup'}).on(...

注意:对于不熟悉此语法的任何人,OP都在使用Mongoose.js。