如何将数据从一个集合复制到MongoDB中的另一个现有集合

时间:2020-01-13 18:18:30

标签: mongodb mongodb-query aggregation-framework

我在MongoDB中有一个coll-1coll-2。因此,我需要将数据从coll-1复制到coll-2,而又不干扰集合数据(两个集合都在同一个DB中),而且我不想做mongoexport和{{1} }由于这些集合会在每次我们需要更新少量数据时收集大量数据,因此我应该很方便。

1 个答案:

答案 0 :(得分:0)

在使用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文档。