首页 > 解决方案 > 如何将数据从一个集合复制到 MongoDB 中的另一个现有集合

问题描述

我在 MongoDB 中有一个coll-1和。coll-2所以,我需要在不干扰集合数据的情况下将数据从一个复制coll-1coll-2另一个(两个集合都在同一个数据库中),我不想这样做mongoexportmongoimport因为每次我们需要更新少量数据时,我都应该收集大量数据方便的。

标签: mongodbmongodb-queryaggregation-framework

解决方案


当您使用 mongoDB V4.2 并且您的两个集合在同一个数据库中并且存在时,您需要使用$merge

试试这个查询:

db.getCollection('coll-1').aggregate( [
   { $merge : { into: { coll: "coll-2" }, on: "_id",  whenNotMatched: "insert" } }
])

col-1 中的文件:

/* 1 */
{
    "_id" : ObjectId("5e1f7ac3f35652fb779fcf3e"),
    "random1" : 1
}

/* 2 */
{
    "_id" : ObjectId("5e1f7acff35652fb779fd310"),
    "random1" : 2
}

col-2 中的文件:

/* 1 */
{
    "_id" : ObjectId("5e1f7adcf35652fb779fdb42"),
    "random2" : 1
}

/* 2 */
{
    "_id" : ObjectId("5e1f7ae5f35652fb779fde24"),
    "random2" : 2
}

结果 :

/* 1 */
{
    "_id" : ObjectId("5e1f7adcf35652fb779fdb42"),
    "random2" : 1
}

/* 2 */
{
    "_id" : ObjectId("5e1f7ae5f35652fb779fde24"),
    "random2" : 2
}

/* 3 */
{
    "_id" : ObjectId("5e1f7ac3f35652fb779fcf3e"),
    "random1" : 1
}

/* 4 */
{
    "_id" : ObjectId("5e1f7acff35652fb779fd310"),
    "random1" : 2
}

由于我想将所有内容写入其中coll-1,在此coll-2之前我没有任何聚合阶段$merge,您需要将其$merge作为聚合管道的最后阶段(出于测试目的,您实际上可以删除它并通过几次空运行验证数据& 然后执行实际操作)。也$merge有很多选项可以通过几个类似 - 如果字段值on匹配和其他选项很少怎么办,所以请阅读 MongoDB 文档。


推荐阅读