Как настроить поток просмотра на ограниченные наборы данных? - PullRequest
0 голосов
/ 01 ноября 2019

Поэтому я хочу использовать потоки изменений 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 Ответ

1 голос
/ 13 ноября 2019

Ваш $match должен быть таким:

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

Поскольку изменение потока вывода не совпадает с выводом операции прямого запроса, вы должны ссылаться на поля документа через fullDocument. Не забудьте добавить {fullDocument: 'updateLookup'} к параметрам просмотра.

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

Примечание: для тех, кто не знаком с этим синтаксисом, OP использует Mongoose.js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...