2015-09-05 98 views
0

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

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

此命令的工作,但问题是,它从源头消除收集和所有的数据移动到目标数据库:

我在MongoDB中选中一个命令。我想在源文件上保留这个集合。所以,我可以将同一个集合复制到多个数据库。

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

+0

嗨,我通过使用它的'mongodump'任何perticular数据库集合,然后'mongorestore'找到其解决方案的任何其他数据库集合。 –

回答

0

如果你不愿意使用copyTo,找到里面插入将是你的下一个最快的赌注。这些都是原始的MongoDB的命令,你不会得到比

选项2

速度,同时我认为,发现里面插入是最快的,你可以得到(除了CopyTo从)另一种选择,这对维护您的索引具有额外的好处,那就是使用mongodump,然后mongorestore使用不同的集合名称。从服务器托管你的mongodb或者在你的mongodb附近短时间配置一台服务器,这样做会很快

+0

感谢您的回复,但很抱歉,我无法使用此功能。因为它需要很多时间..如果你有任何其他建议。那么请给我建议。 –

0

当使用bulk operations时,这很简单。

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

如果您只需要操作一次,你可以轻松地做蒙戈外壳:

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() 

注意,这不会复制指数,你应该之前或以上的批量操作后产生。

+0

感谢您的回复。我检查了这一点。但没有处理太多的数据。因为我有数百万条记录。 –

+0

你应该每10万条记录执行一次批量操作或者像这样。 –

相关问题