“конвейер” изменений mongodb не работает с узлами

#node.js #mongodb #mongodb-query #aggregation-framework #changestream

#node.js #mongodb #mongodb-запрос #агрегация-фреймворк #поток изменений

Вопрос:

У меня есть следующий поток изменений, но он не функционирует, изменения не регистрируются после обновления с помощью mongo compass.

 var pipeline = [
  { $match: { _id: ObjectId(id) } }
];
try {
  const collection = client.db("mydb").collection("shop");
  const changeStream = collection.watch(pipeline);
  changeStream.on('change', (next) => {
    //console.log(next);
    console.log('changed')
  }, err => {
    console.log(err);
  });
} catch (err) {
  console.log(err)
}
 

Комментарии:

1. Вы не меняете документ с правильным _id или меняете его в неправильной коллекции или базе данных.

2. Я нахожусь на этапе тестирования… Я буквально копирую идентификатор из Mongo Compass

3. Вы скопировали его неправильно или работаете с неправильной коллекцией / базой данных.

4. У меня есть другой функциональный конвейер, который не использует _id, если он функционален… Я не копировал неправильный _id

Ответ №1:

Проблема в том, что вы обычно не обновляете _id документа в коллекции? Если по какой-то причине вы обновляете _id, возможно, проблема в том, как вы ссылаетесь на свой $match. Это работает для меня:

 const pipeline01 = [
  { $match: { 'updateDescription.updatedFields.fieldIamInterestedIn': { $ne: undefined } } },
  { $project: { 'fullDocument._id': 1, 'fullDocument.anotherFieldIamInterestedIn': 1 } },
];
theCollectionIamWatching.watch(pipeline01, { fullDocument: 'updateLookup' }).on('change', async (data) => {
// do the thing I want to do using data.fullDocument
});