2015-09-05 101 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萬條記錄執行一次批量操作或者像這樣。 –

相關問題