有什么简单的方法吗?


当前回答

实际上,有一个命令用于将集合从一个数据库移动到另一个数据库。它只是不叫“移动”或“复制”。

若要复制集合,可以在同一数据库上克隆它,然后移动克隆的集合。

克隆:

> use db1
switched to db db1

> db.source_collection.find().forEach(
      function(x){
          db.collection_copy.insert(x)
      }
  );

移动:

> use admin
switched to db admin

> db.runCommand(
      {
          renameCollection: 'db1.source_collection',
          to              : 'db2.target_collection'
      }
  );

其他答案更适合复制集合,但如果您希望移动集合,这个答案尤其有用。

其他回答

有不同的方法来进行集合复制。注意,复制可以发生在同一个数据库、不同的数据库、分片数据库或mongod实例中。有些工具对于大型集合的复制是有效的。

使用$merge聚合: 将聚合管道的结果写入指定的集合。注意,复制可以跨数据库进行,甚至可以跨分片集合进行。创建一个新的集合或替换现有的集合。4.2新版功能。 例子:db.test。聚合([{$merge: {db: "newdb", coll: "newcoll"}}])

带$out的聚合: 将聚合管道的结果写入指定的集合。注意,复制只能在同一个数据库中进行。创建一个新的集合或替换现有的集合。 例子:db.test。聚合([{$out: "newcoll"}])

Mongoexport和mongoimport: 这些是命令行工具。 mongoexport生成集合数据的JSON或CSV导出。导出的输出使用mongoimport作为目标集合的源。

mongodb和mongorestore: 这些是命令行工具。 mongodb实用程序用于创建数据库或集合内容的二进制导出。mongorestore程序从mongodump创建的二进制数据库转储中加载数据到目标。

db.cloneCollection (): 将一个集合从远程mongod实例复制到当前mongod实例。 4.2版后已移除。

db.collection.copyTo (): 将所有文档从集合复制到新集合(在同一数据库中)。 3.0版后已移除。从4.2版开始,MongoDB此命令无效。

注意:除非上面的命令是从mongo shell运行的。

参考:MongoDB手册。

您也可以使用最喜欢的编程语言(如Java)或环境(如NodeJS),使用适当的驱动程序软件编写程序来执行复制-这可能涉及使用查找和插入操作或其他方法。这个查找-插入也可以从mongo shell执行。

您还可以使用像MongoDB Compass这样的GUI程序进行集合复制。

使用pymongo,你需要在同一个mongod上有两个数据库,我做了以下工作:


Db =原始数据库 Db2 =要复制到的数据库

cursor = db["<collection to copy from>"].find()
for data in cursor:
    db2["<new collection>"].insert(data)

您可以使用聚合框架解决您的问题

db.oldCollection.aggregate([{$out : "newCollection"}])

需要注意的是,oldCollection中的索引不会复制到newCollection中。

如果在两个远程mongod实例之间,则使用

{ cloneCollection: "<collection>", from: "<hostname>", query: { <query> }, copyIndexes: <true|false> } 

参见http://docs.mongodb.org/manual/reference/command/cloneCollection/

目前,MongoDB中还没有这样的命令。请注意带有相关功能请求的JIRA票据。

你可以这样做:

db.<collection_name>.find().forEach(function(d){ db.getSiblingDB('<new_database>')['<collection_name>'].insert(d); });

请注意,在这种情况下,两个数据库需要共享同一个mongod才能正常工作。

除此之外,您还可以从一个数据库对一个集合进行mongodump,然后再将该集合恢复到另一个数据库。