Jac*_*ack 9 database mongodb nosql
首先请注意这个问题与以下两个不同
我将解释如下:
我有两个名为:DB_A和DB_B我的mongodb的数据库.
每个数据库都有一个名称相同的集合store.
两个集合都有很多具有完全相同结构的文档{key:"key1",value:"value1"}等.
实际上,我应该只创建DB_A并插入所有文档DB_A.但后来当我进行第二轮插入时,我输入了错误的名称作为数据库名称.
所以现在,每个数据库的大小都是32GB,我希望合并两个数据库.
一个问题/制约因素是,可用空间现在只有15GB,所以我不能只copy从所有的东西DB_B来DB_A.
我想知道我能做到move吗?或者合并两个简单数据库最简单/最好/ 最快的方法是什么?我更喜欢最有效的方式,因为简单地重新插入32GB DB_A将需要相当长的时间.
我认为最简单(也许是唯一的)方法是编写一个脚本,将文档后的两个数据库文档合并.
您可能只想批量读取文档,而不是从源数据库(DB_B)中删除文档.这应该更高效,但编码稍微困难(特别是如果你从未做过这样的事情).
开始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" }
Run Code Online (Sandbox Code Playgroud)
默认情况下,当目标和源集合包含具有相同 的文档时_id,$merge将使用源集合中的文档替换目标集合中的文档。为了自定义此行为,请检查$merge的whenMatched参数。
| 归档时间: |
|
| 查看次数: |
12429 次 |
| 最近记录: |