Spring 数据MongoDB: MergeOperation returns 整个集合。为什么?
Spring Data MongoDB: MergeOperation returns the whole collection. Why?
我是 运行 一个 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()
return集合中的所有文档。
这是一个主要缺点,当集合足够大时无法很好地扩展。
如何更改我的查询,以便它 return 仅显示更改的文档。或者如果不可能,只应用查询而不 returning 任何东西。
找到 并将与未来的读者分享:
mongoTemplate.aggregate(aggregation.withOptions(newAggregationOptions().skipOutput().allowDiskUse(true).build()), "collectionNme", EntityClass.class);
我是 运行 一个 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()
return集合中的所有文档。
这是一个主要缺点,当集合足够大时无法很好地扩展。
如何更改我的查询,以便它 return 仅显示更改的文档。或者如果不可能,只应用查询而不 returning 任何东西。
找到
mongoTemplate.aggregate(aggregation.withOptions(newAggregationOptions().skipOutput().allowDiskUse(true).build()), "collectionNme", EntityClass.class);