合并两个 MongoDB 集合

3

我正在尝试将两个集合合并为一个(不是连接)。我有两个具有相同集合结构的数据库。

例如:

Collection test1 db1:

{
    "_id" : ObjectId("574c339b3644a65b36e77359"),
    "appName" : "App1",
    "customerId" : "Client1",
    "environment" : "PROD",
    "methods" : []
}

Collection test2 db2:

{
    "_id" : ObjectId("574c367d627b45ef0abc00e5"),
    "appName" : "App2",
    "customerId" : "Client2",
    "environment" : "PROD",
    "methods" : []
}

我想创建如下所示的内容:

一个测试数据库集合,其中文档将从test1和test2合并,但彼此之间不会合并。实现这个目标的正确方法是什么?

{
    "_id" : ObjectId("574c339b3644a65b36e77359"),
    "appName" : "App1",
    "customerId" : "Client1",
    "environment" : "PROD",
    "methods" : []
},    
{
    "_id" : ObjectId("574c367d627b45ef0abc00e5"),
    "appName" : "App2",
    "customerId" : "Client2",
    "environment" : "PROD",
    "methods" : []
}

问题在于MongoDB的其他集合中引用了ID,导致情况变得复杂。


如果我的回答对您有帮助,请接受它,参见此链接:http://stackoverflow.com/help/accepted-answer - profesor79
1个回答

1
最快的方法是创建一个转储文件(使用mongodump),然后立即恢复它们(以下示例使用Windows路径)。
mongodump  --db test1 --collection test1  --out c:\dump\test1
mongodump  --db test2 --collection test2  --out c:\dump\test2

mongorestore  --db test3 --collection test3   c:\dump\test1
mongorestore  --db test3 --collection test3   c:\dump\test2

谢谢您的建议,@profesor79,这种方法是否能解决“复杂性在于ID被Mongo的其他集合引用”的部分? - Dmitry R
所以我们在源文件中有重复的内容 - 是这样吗? - profesor79
我在源数据库的另一个集合中引用了该ID,因此当导入完成后,原始ID将更改,而其他集合仍将引用原始ID。我看不到任何解决方法,除非按依赖顺序逐个导入并更新原始引用以生成新的_id。欢迎提出任何无需编写大量代码的建议。 - Dmitry R
但是 _id 将被保留 - 除非我们有重复。 - profesor79

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接