首先请注意这个问题与以下两个不同
MongoDB: Combine data from multiple collections into one..how?
Merging two collections in MongoDB
我将解释如下:
我的mongodb中有两个名为DB_A
和DB_B
的数据库。
每个数据库都有一个名为store
的同名集合。
两个集合都有很多具有完全相同结构的文档{key:“key1”,value:“value1”}等。
实际上,我应该只创建DB_A
并将所有文档插入DB_A
。但是后来当我进行第二轮插入时,我输入了错误的名称作为数据库名称。
现在,每个数据库的大小都是32GB,我希望合并两个数据库。
一个问题/限制是现在可用空间仅为15GB,因此我不能只copy
DB_B
到DB_A
的所有内容。
我想知道我是否可以做move
?或者什么是最简单/最好/ 快速合并两个简单数据库的方式?我更喜欢最有效的方法,因为简单地将32GB重新插入DB_A
需要很长时间。
答案 0 :(得分:5)
我认为最简单(也许是唯一的)方法是编写一个脚本,在文档之后合并两个数据库文档。
您可能只想批量阅读文档,而不是从源db(DB_B)中删除文档。这应该更高效,但编码稍微困难(特别是如果你从未做过这样的事情)。
答案 1 :(得分:3)
从Mongo 4.2
开始,新的聚合阶段$merge
可用于合并另一个数据库中另一个集合中集合的内容:
// > use db1
// > db.collection.find()
// { "_id" : 1, "key" : "a", "value" : "b" }
// { "_id" : 2, "key" : "c", "value" : "d" }
// { "_id" : 3, "key" : "a", "value" : "b" }
// > use db2
// > db.collection.find()
// { "_id" : 1, "key" : "e", "value" : "f" }
// { "_id" : 4, "key" : "a", "value" : "b" }
// > use db1
db.collection.aggregate([
{ $merge: { into: { db: "db2", coll: "coll" } } }
])
// > use db2
// > db.collection.find()
// { "_id" : 1, "key" : "a", "value" : "b" }
// { "_id" : 2, "key" : "c", "value" : "d" }
// { "_id" : 3, "key" : "a", "value" : "b" }
// { "_id" : 4, "key" : "a", "value" : "b" }
默认情况下,当目标和源集合包含具有相同_id
的文档时,$merge
将用源集合中的文档替换目标集合中的文档。为了自定义此行为,请检查$merge
的{{1}}参数。