【发布时间】:2021-08-19 14:17:19
【问题描述】:
我正在运行一个 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() 返回集合中的所有文档。
这是一个主要缺点,当集合足够大时无法很好地扩展。
如何更改我的查询,使其仅返回更改后的文档。或者如果不可能,只应用查询而不返回任何内容。
【问题讨论】:
-
显然您对聚合管道的 Spring 实现如何操作做出了一些不准确的假设。在这里,您称其为问题,但它按设计返回结果,根据定义,这不是问题,而是功能。如您所见,一个选项允许关闭在线文档 (docs.spring.io/spring-data/mongodb/docs/current/api/org/…) 中包含的数据返回 (skipOutput())。您的问题看起来充满敌意,这很少有帮助。
-
@barrypicker,感谢您的评论,但我很震惊您认为我的问题充满敌意。哎呀,我什至添加了一个答案以帮助未来的读者。顺便说一句,当我从 MongoDB IDE 运行相同的查询时,我收到一条消息,查询运行成功但没有返回任何输出,所以我认为有人与聚合 API 不一致
标签: java mongodb spring-data spring-data-mongodb