我正在尝试使用spring-data将一个集合(大或小的)复制到同一mongo数据库中的另一个集合。
我发现的每个解决方案都已弃用或不起作用。 我尝试了这个似乎最适合我的人:
mongoTemplate.getCollection("oneCollection").aggregate(Arrays.asList(new Document("$out","otherCollection")));
但是它什么也不做,没有错误,对数据库没有任何操作。
您有什么解决方案可以使用spring-data轻松复制集合吗?
答案 0 :(得分:0)
尝试:
OutOperation outOperation = new OutOperation("otherCollection");
mongoTemplate.aggregate(Aggregation.newAggregation(outOperation), "oneCollection", BasicDBObject.class);
答案 1 :(得分:0)
请注意,OutOperation
当前替换目标集合。
此集合中已有的所有数据都将丢失并被此操作替换。
(Spring 的 OutOperation
有一个 OutMode
,但底层 mongo 驱动程序不支持它,如果有人对此有更多信息?)
对于那些希望将值插入到目标集合中而不是替换整个集合的人:
Mongo 4.2 有 introduced 一个 $merge
操作。
它在 recent spring 中称为 MergeOperation
。
为了使用这个新操作,您可能需要将 mongo 驱动程序 升级到版本 > 4.2。它不适用于 mongodb-driver-sync:4.0.5
,它可能是 Spring 默认拉取的那个。
MergeOperation mergeOp = Aggregation.merge().intoCollection("othercollection").build();
mongoTemplate.aggregate(mergeOp, "originalcollection", BasicDBObject.class);
另见,skipOutput()
option。