我正在运行MongoDB聚合操作,最后一个阶段是$merge
,它将某些字段写入另一个集合中。基本上,这个$merge应该只对单个文档产生影响(这就是为什么我们有on:"_id"
)。
以下是我在Java中执行它的方式:
var merge = Aggregation.merge().intoCollection("items")
.on("_id")
.whenMatched(MergeOperation.WhenDocumentsMatch.mergeDocuments())
.whenNotMatched(MergeOperation.WhenDocumentsDontMatch.discardDocument())
.build();
var agg = Aggregation.newAggregation(match, group, merge);
var aggResult = mongoTemplate.aggregate(agg, "prices", Item.class);
聚合操作已经实现了其所需的功能,我能看到请求的文档已经改变,但问题是
aggregate()
返回集合中的所有文档,这是一个主要的缺陷,当集合足够大时,不会有很好的扩展性。如何更改查询使其只返回已更改的文档。如果无法实现,则只应用查询而不返回任何内容。