繁体   English   中英

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

[英]php: MongoDB copy collection from database to another

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

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

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

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

谁能有更好的建议? 请帮我这个脚本。

如果您不愿意使用copyTo,则在insert内查找将是下一个最快的选择。 这些都是本地的mongodb命令,您不会比这更快

选项2

尽管我坚持认为,在insert内查找是最快的(除了copyTo之外),另一个选项是维护索引,它的另一个好处是可以使用mongodump然后使用具有不同集合名称的mongorestore 从托管mongodb的服务器执行此操作,或者在mongodb附近配置服务器一小段时间,这样将很快

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM