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


php: MongoDB copy collection from database to another

我需要帮助从一个数据库复制一个集合到另一个。我搜索了很多次,但没有找到合适的解。都是使用copyTo或简单的查找查询内插入。这些都不是最好的解决方案。因为copyTo阻塞了我所有的数据库操作。并且insert将数据从一个集合复制到另一个集合需要花费太多时间。因为我收藏了数百万张唱片。

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

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

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

谁有更好的建议?

这在使用批量操作时非常简单。

对于php,这称为批处理操作。只需从源数据库(将被视为一个数组)获取所有文档,并将它们作为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()

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

如果您不愿意使用copyTo,那么查找内部插入将是您下一个最快的选择。这些都是mongodb的本地命令,没有比这更快的了

选项2

虽然我认为在insert中查找是您可以获得的最快的方法(除了copyTo),但另一个选项(具有维护索引的额外好处)是使用mongodump然后mongorestore与不同的集合名称。从托管mongodb的服务器或在mongodb附近的短时间内提供服务器,这样它就会很快