2013-10-05 73 views
2

我蒙戈DB包含以下集合名稱,如MongoDB的更新多個集合

10.9.40.46 
10.9.40.47 
10.9.40.48 
10.9.40.49 
10.9.40.50 
10.9.40.51 
10.9.40.52 

在所有集合具有文件N位數,每個文件在默認情況下有共同鍵名爲「狀態」的所有文件有「身份」 1 ,當我更新我的收藏改變「身份」 1比0我用下面的查詢

db.getCollection("10.9.40.46").update({"status":1},{$set:{"status":0}},false,true) 

上面的查詢做工精細,但我想更新我的所有收藏品,然後我通過我的收藏名進行查詢手工,所以有是我使用數據庫a的MongoDB中的任何概念nd更新該數據庫中的所有集合文檔使用單個查詢或類似的東西?我也使用循環來讀取所有集合和更新文檔,但由於大量的集合,我需要很長時間。

回答

7

不,沒有API可以使用單個命令對多個集合執行相同的操作。這是因爲您通常不會像使用它們那樣使用集合。集合用於對相同類型的文檔進行分組,而不是基於內容和/或密鑰進行分組。

組織文檔的正常方法是將它們全部放在一個集合中,爲每個文檔添加一個IP地址字段,並在ip字段上創建一個索引以加快查找速度。

+0

我會說集合是「典型」的,但並不總是用於對相同類型的文檔進行分組。有些情況下,將不同類型的數據放在同一個集合中是值得的。 #minorNit –

+0

如果我將所有集合文檔放在單個集合中,那麼我的單個集合會增加大小,而且我的代碼每5分鐘就會工作一次。我把新數據放入集合中,以便單個集合如何處理這種情況,可能存在像寫鎖一樣的問題? – Yogesh

+0

@yogesh收集大小不應該是一個問題。 MongoDB旨在擴展到龐大的集合大小。寫鎖是每個數據庫,而不是每個集合。因此,使用更多集合並不會減少由於寫入鎖定而導致延遲操作的可能性。有關MongoDB中數據庫鎖定的更多信息,請參閱http://docs.mongodb.org/manual/faq/concurrency/。 – Philipp

0

你可以使用for循環相同。

var collection='10.9.40.' 
var count=46; 
var n=46; 
var url=''; 
for(i =0;i<7;i++){ 
url=""; 
n=46+i; 
url=count+n; 
db.getCollection(url).update({"status":1},{$set: 
{"status":0}},false,true) 
}