【问题标题】:Spring Data MongoDB: MergeOperation returns the whole collection. Why?Spring Data MongoDB:MergeOperation 返回整个集合。为什么?
【发布时间】: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


【解决方案1】:

找到answer并将分享给未来的读者:

mongoTemplate.aggregate(aggregation.withOptions(newAggregationOptions().skipOutput().allowDiskUse(true).build()), "collectionNme", EntityClass.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-28
    • 2014-03-18
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2014-01-21
    相关资源
    最近更新 更多