根据mongodb changestream的文档,我可以查看集合中特定字段的更新:
const changeStream = collection.watch(
[{
$match: {
$and: [
{ "updateDescription.updatedFields.a": { $exists: true } },
{ operationType: "update" }
]
}
}],
{
fullDocument: "updateLookup"
}
);
我想知道,如何用 spring data mongodb reactive 实现同样的事情。
当我用
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)
)
)
我没有改变事件。所以这里有一个问题:我如何定义 Criteria 以匹配updatedField.b上的更新?
集合中的示例文档是:
{
"_id" : ObjectId("5b14f049b2645a4a24b33df1"),
"a" : "va",
"b" : "vb",
"_class" : "com.example.demo.TestObject"
}
第一个“工作”过滤器的示例可以在以下位置下载: 我的测试 github repo