如何将一个Mongo数据库中的记录插入到另一个Mongo数据库中?

16
据我所见,所有命令在mongodb中都操作同一个数据库。 我想要做类似这样的事情:

db.mySourceCollection.find().forEach( function(x){ db.theDestinationCollection.save(x)} );

其中,mySourceCollectionliveDatabase 上,而theDestinationCollectiontestDatabase 上。
2个回答

15

使用use :-)

> var documents = db.mySourceCollection.find()
> use testDatabase
switched to db testDatabase
> documents.forEach(function(x){ db.theDestinationCollection.insert(x) })

db用来引用当前连接的数据库,但是你可以使用use命令进行动态切换数据库,就像我上面展示的那样。

在shell中可以使用help命令查看更多相关信息,其中包括这个命令以及更多内容!


谢谢!我知道use()方法,但我没想到要将状态保存在变量中。在我看来,我希望数据库上有一个use()方法,以便流畅地使用,例如: db.use('sourceDb').collectionA.do(db.use('destDb')。 - b7kich
可能会出现数据库中有UTF-8字符的情况。由于这是通过客户端运行的,如果客户端是本地的(例如对于Ubuntu,“$ mongo --version” =>“MongoDB shell version: 1.6.3”),它可能缺少UTF-8,然后复制将失败。如果是这种情况,并且您不想将脏东西放入服务器以重新编译新客户端,则始终可以重新编译到单独的机器上,并通过连接到远程服务器来完成此作业。尽管如此,数据将从服务器流向客户端,然后返回,因此速度可能会很慢。但是,使用远程UTF-8客户端,可以正常工作! - Xavi Montero

13

use dbname在脚本模式下(即使用JavaScript脚本编写shell时)无法工作,因此您应该使用db.getSiblingDB()方法重新分配'db'变量,例如:

db = db.getSiblingDB("otherdb")

更多信息请查看:http://www.mongodb.org/display/DOCS/Scripting+the+shell


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