2012-01-18 67 views
0

我有一個標籤集合包含以下結構的文件:如何高效地批量插入和更新數組中的mongodb文檔值?

{ 
    word:"movie", //tag word 
    count:1  //count of times tag word has been used 
} 

我給出的是需要添加/更新的標籤收集新的標籤數組:

["music","movie","book"] 

我可以使用以下查詢更新當前存在於標籤集合中的所有標籤的計數:

db.Tags.update({word:{$in:["music","movies","books"]}}, {$inc:{count:1}}), true, true); 

雖然這是一種有效的策略, pdate,我無法看到集合中沒有找到哪些標記值,並且將upsert標誌設置爲true並未爲未標記的標記創建新文檔。

這是我被卡住的地方,我應該如何處理批量插入的「新」值到標籤集合中? 有沒有其他方法可以更好地利用更新,以便它可以插入新的標籤值?

(注:我使用的貓鼬/節點蒙戈本機將是不錯,但沒有必要使用Node.js的與貓鼬,解決方案)

感謝提前

回答

1

使用upsert的概念和$in運營商同時不協調。這根本行不通,因爲upsert if *any* inupsert if *none* in之間沒有辦法區別。

在這種情況下,MongoDB正在執行您不希望它執行的操作。但是你不能讓它改變行爲。

我會建議通過循環標籤數組來簡單地發出三個連續寫入。我知道這很煩人,它有一個不好的代碼味,但這就是MongoDB的工作原理。

+0

這個循環真的很爛......我使用的python是非編譯的,循環會顯着減慢我的代碼,因爲我經常需要更新一長串文檔。 我正在探索其他基於文檔的數據庫,以查看我是否找不到更好的東西。 – RockScience 2013-10-30 02:54:20