Как следить за изменениями в определенных полях в потоке изменений MongoDB с помощью Spring Data Mongodb - PullRequest
0 голосов
/ 04 июня 2018

В соответствии с документацией файла изменений mongodb, я могу следить за обновлениями в определенных полях сбора:

const changeStream = collection.watch(
[{
  $match: {
    $and: [
      { "updateDescription.updatedFields.a": { $exists: true } },
      { operationType: "update" }
    ]
  }
}],
{
  fullDocument: "updateLookup"
}
);

Я хотел бы знать, как добиться того жевещь с пружинными данными mongodb реактив.

Когда я создаю поток изменений с

Flux<ChangeStreamEvent<TestObject>> changeStream = 
mongoTemplate.changeStream(
        newAggregation(
            match(
                where("operationType").is("update")
                    .and("updateDescription").exists(true)
            )
        ),
        TestObject.class,
        ChangeStreamOptions.empty(),
        "testObject"
    );

, я получаю все обновления.Журнал одного из этих событий изменения выглядит следующим образом:

ChangeStreamEvent {
raw=ChangeStreamDocument{
    resumeToken={ "_data" : { "$binary" : "glsU9sYAAAATRmRfaWQAZFsU9sayZFockO0phgBaEATGaP42X4VI+4SrTyscwRtsBA==", "$type" : "00" } },
    namespace=test.testObject, 
    fullDocument=Document{{_id=5b14f6c6b2645a1c90ed2986, a=a, b=b, _class=com.example.demo.TestObject}}, 
    documentKey={ "_id" : { "$oid" : "5b14f6c6b2645a1c90ed2986" } }, 
    clusterTime=null, 
    operationType=OperationType{value='update'}, 
    updateDescription=UpdateDescription{removedFields=[], updatedFields={ "b" : "b" }}}, 
    targetType=class com.example.demo.TestObject
    }

Однако, когда я изменяю фильтр на

newAggregation(
            match(
                where("operationType").is("update")
                    .and("updateDescription.updatedFields").exists(true)
            )
        )

или

newAggregation(
            match(
                where("operationType").is("update")
                    .and("updateDescription.updatedFields.b").exists(true)
            )
        )

, я не получаюизменить события.Итак, вот вопрос: как я могу определить Критерии для соответствия обновлений на updatedField.b ?

Пример документа из коллекции:

{
  "_id" : ObjectId("5b14f049b2645a4a24b33df1"),
  "a" : "va",
  "b" : "vb",
  "_class" : "com.example.demo.TestObject"
}

Пример с первым «рабочим» фильтром можно скачать по адресу: my test github repo

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