php:MongoDB从数据库到另一个的集合

时间:2015-09-05 04:50:58

标签: php mongodb mongodb-query

我需要帮助将一个集合从一个数据库复制到另一个数据库。我多次搜索,但没有得到任何适当的解决方案。所有人都在插入中使用copyTo或简单查找查询。这不是最佳解决方案。因为copyTo会阻止我的所有数据库操作。和插入需要花费太多时间将数据从一个集合复制到另一个集合。因为我的收藏中有数百万条记录。

我在mongoDB中检查了一个命令:

db.runCommand({renameCollection:'db1.collection_name', to: 'db2.collection_name'});

此命令在php中正常工作,但问题是它从源中删除了集合并将所有数据移动到目标数据库。我想在源代码上保留这个集合。所以,我可以将同一个集合复制到多个数据库中。

任何人都可以有更好的建议吗?请帮我这个剧本。

2 个答案:

答案 0 :(得分:0)

如果你不愿意使用copyTo,那么在插入内部找到你的下一个最快的赌注。这些都是本机mongodb命令,你不会比那更快

选项2

虽然我认为在插入内部查找是最快的(除了copyTo)另一个选项,它具有维护索引的额外好处,是使用mongodump然后使用mongorestore不同的集合名称。从托管你的mongodb的服务器或在你的mongodb附近短时间配置服务器这样做,这样就会很快

答案 1 :(得分:0)

使用bulk operations时,这非常简单。

对于php,这称为batch operations。只需从源数据库中获取所有文档(将被视为数组)并将它们作为参数放入batchInsert方法。

如果你只需要这样做一次,你可以在mongo shell上轻松完成:

use sourceDb
var targetDb= db.getSiblingDB("targetDb")
var bulk = targetDb.targetCollection.initializeUnorderedBulkOp()
var docs = db.sourceCollection.find()
docs.forEach(
  function(doc){
    bulk.insert(doc);
  }
)
bulk.execute()

请注意,这不会复制索引,您应该在上面的批量操作之前或之后生成索引。