如何将一个集合从一个MongoDB克隆到同一服务器上的另一个MongoDB

如何将一个集合从一个MongoDB克隆到同一服务器上的另一个MongoDB,mongodb,mongodb-query,clone,Mongodb,Mongodb Query,Clone,我使用的是Mongo3.2。我的本地主机上有两个数据库,分别名为client1和client2。 现在client1包含一个名为users的集合。 我想将此集合克隆到客户端2 我试过:- 使用客户端2 db.cloneCollection('localhost:27017','client1.users',', {'active':true}) 这个输出 { “ok”:0.0, “errmsg”:“无法从自身完成收集” } 是否禁止在同一服务器上将集合从一个数据库克隆到另一个数据库 db.clo

我使用的是Mongo3.2。我的本地主机上有两个数据库,分别名为client1client2。 现在client1包含一个名为users的集合。 我想将此集合克隆到客户端2

我试过:-

使用客户端2

db.cloneCollection('localhost:27017','client1.users',', {'active':true})

这个输出

{ “ok”:0.0, “errmsg”:“无法从自身完成收集” }

是否禁止在同一服务器上将集合从一个数据库克隆到另一个数据库

db.cloneCollection()
直接在MongoDB实例之间复制数据

这意味着您不能在同一mongod实例中进行克隆。使用和克隆您的收藏


由于4.2 MongoDb引入了允许从
db1.collection
复制到
db2.collection
的操作符

几件事:

  • 通常用于不同的mongo实例,但不用于复制相同的实例
  • 另外,如果您使用的是
    v4.2
    ,您应该停止使用
    copyDB
    &
    cloneCollection
    ,因为它们已被弃用&开始使用and或&
  • 我建议使用mongodumpmongorestore

  • 原因mongodump将保留MongoDB的数据类型,即:<代码>bson类型
  • mongodump创建一个二进制文件,其中asmongoexport会将
    bson
    转换为
    json
    &再次mongoimport会在编写时将
    json
    转换为
    bson
    ,这就是它们速度慢的原因。当您希望直观地分析集合数据或将
    json
    数据用于任何其他目的时,可以使用mongoexport和mongoimport
  • 您可以在shell中运行下面的脚本

    declare - a collections = ("collectionName1" "collectionName2")
    for i in "${collections[@]}"
    do
    echo "$i"
        mongodump --host "All-shards" --username=uname --password password --ssl --authenticationDatabase admin --db dbname --collection "$i"
    
        mongorestore --host=host-shard-name --port=27017 --username=uname --password=psswrd --ssl --authenticationDatabase=admin --db=dbname --collection= "$i" ./dump/dbName/"$i".bson;
    done
    
  • 要使用mongodump,必须针对正在运行的mongod或mongos实例运行mongodump。因此,运行这些命令时需要正确安装mongo,并且路径设置良好,否则您可以导航到mongo文件夹并像
    /mongodump
    /mongorestore
    一样运行。如果要备份多个集合,上述脚本将非常有用,您需要在脚本中指定以下几项:

  • mongodump——主机“所有碎片”
    ->如果MongoDB是副本集,则需要指定所有碎片;如果不是副本集,则可以指定
    localhost:27017

  • mongorestore--host=host shard name
    ->您必须指定副本集的一个shard,否则您的
    localhost
    ,这里几乎没有什么东西是可选的
    --ssl
    --username
    --password

  • 因此,mongodump将首次创建一个名为dump的文件夹,其中包含具有dbname的子文件夹&每个子文件夹都将包含与其集合名称对应的
    bson
    文件,因此,您需要在restore命令中引用
    dbName
    ,集合名称将取自变量
    i
    ->
    /dump/dbName/“$i”。bson
  • 注意:MongoDB
    v3.2
    太旧了&在基于云的MongoDB服务中,它已经到了生命周期的尽头,所以请尽快升级。如果你正在寻找一个免费的mongo实例或者从MongoDB开始,你可以试试atlas