【问题标题】:php: MongoDB copy collection from database to anotherphp:MongoDB 将集合从数据库复制到另一个
【发布时间】:2015-09-05 04:50:58
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 嗨,我找到了解决方案,方法是使用它的“mongodump”任何特定的数据库集合,然后使用“mongorestore”到任何其他数据库集合。

标签: php mongodb mongodb-query


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。我检查这个。但没有处理太多数据。因为我有数百万条记录。
  • 您应该每 100k 记录执行一次批量操作或类似的操作。
【解决方案2】:

如果您不愿意使用 copyTo,那么 find inside insert 将是您下一个最快的选择。这些都是本地 mongodb 命令,你不会比这更快

选项 2

虽然我认为 find inside insert 是最快的(除了 copyTo),但另一个具有维护索引的额外好处的选项是使用 mongodump 然后 mongorestore 使用不同的集合名称。从托管您的 mongodb 的服务器执行此操作,或者在您的 mongodb 附近短时间配置服务器,这样它会很快

【讨论】:

  • 感谢回复,但是很抱歉,我不能使用这个。因为这需要很多时间.. 如果您有任何其他建议。那么请给我建议。
猜你喜欢
  • 2016-08-24
  • 2012-07-18
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
相关资源
最近更新 更多