我需要帮助将一个集合从一个数据库复制到另一个数据库。我多次搜索,但没有得到任何适当的解决方案。所有人都在插入中使用copyTo
或简单查找查询。这不是最佳解决方案。因为copyTo
会阻止我的所有数据库操作。和插入需要花费太多时间将数据从一个集合复制到另一个集合。因为我的收藏中有数百万条记录。
我在mongoDB中检查了一个命令:
db.runCommand({renameCollection:'db1.collection_name', to: 'db2.collection_name'});
此命令在php中正常工作,但问题是它从源中删除了集合并将所有数据移动到目标数据库。我想在源代码上保留这个集合。所以,我可以将同一个集合复制到多个数据库中。
任何人都可以有更好的建议吗?请帮我这个剧本。
答案 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()
请注意,这不会复制索引,您应该在上面的批量操作之前或之后生成索引。