如何使用Spring Data Mongodb监视MongoDB更改流中特定字段的更改

时间:2018-06-04 08:30:47

标签: mongodb spring-data-mongodb changestream

根据mongodb更改流的documentation,我可以查看有关收集的特定字段的更新:

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

我想知道,如何用spring数据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"
}

第一个&#34;工作&#34;的例子过滤器可在以下位置下载: my test github repo

0 个答案:

没有答案