Spring Data MongoDB:MergeOperation 返回整个集合。为什么?

yas*_*eco 7 java mongodb spring-data spring-data-mongodb

我正在运行 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);
  
Run Code Online (Sandbox Code Playgroud)

聚合执行了它需要的操作,我可以看到请求的文档已更改,但问题是aggregate()返回集合中的所有文档。

这是一个主要缺点,当集合足够大时,无法很好地扩展。

如何更改我的查询,使其仅返回更改后的文档。或者,如果不可能,只需应用查询而不返回任何内容。

yas*_*eco 8

找到了答案并将分享给未来的读者:

mongoTemplate.aggregate(aggregation.withOptions(newAggregationOptions().skipOutput().allowDiskUse(true).build()), "collectionNme", EntityClass.class);
Run Code Online (Sandbox Code Playgroud)