如何将mongodb集合复制/克隆到另一个?

时间:2019-08-27 10:00:20

标签: java mongodb spring-data-mongodb

我正在尝试使用spring-data将一个集合(大或小的)复制到同一mongo数据库中的另一个集合。

我发现的每个解决方案都已弃用或不起作用。 我尝试了这个似乎最适合我的人:

    mongoTemplate.getCollection("oneCollection").aggregate(Arrays.asList(new Document("$out","otherCollection")));

但是它什么也不做,没有错误,对数据库没有任何操作。

您有什么解决方案可以使用spring-data轻松复制集合吗?

2 个答案:

答案 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