我在命令行中使用MongoDB去遍歷特定條件的一堆文檔,從一個集合移動到另一個集合並從原始集合中移除。PHP MongoDB execute()鎖定集合
db.coll1.find({'status' : 'DELETED'}).forEach(
function(e) {db.deleted.insert(e); db.coll1.remove({_id:e._id}); });
這個工作,但是我需要劇本此所以它通過cron腳本會將所有文件中coll1刪除收集每天(或每小時)來。我使用PHP,所以我想我會寫一個腳本中使用PHP蒙戈圖書館::
$db->execute('db.coll1.find({'status' :'DELETED'}).forEach(
function(e) { db.deleted.insert(e); db.coll1.remove({_id:e._id}); })');
這工作,但蒙戈命令行不同,DB->的execute()是evaled,這會導致鎖定直到執行塊完成,這會阻止對集合的所有寫入。我在生產環境中無法做到這一點。
有沒有一種方法(無需手動登錄到Mongo並運行該命令)並通過PHP腳本執行而不鎖定?
如果我使用:
db->selectCollection('coll1')->find(array('status' => 'DELETED'))
,並遍歷,我可以選擇的文件,保存到已刪除的收集和從coll1集合中刪除。然而,這似乎有很多帶寬來拉取客戶端上的所有內容並將其保存回服務器。
有什麼建議嗎?
謝謝你的回答和時間sammaye –