2013-10-26 55 views
0

我爲形式的文檔集合:如何在不構建循環查詢的情況下爲整個對象提供完整的屬性?

{ name:String, groceries:{ apples:Number, cherries:Number, prunes:Number } } 

現在,每個查詢我必須用積極和/或負值的每個元素遞增「雜貨」。什麼鍵或多少並不重要,我只是添加了一些例子。

我可以做一個:

var dataToBeIncremented = stuff; 
var $inc = {}; 
for each(var index in dataToBeIncremented) 
{ 
    $inc[ "groceries." + index ] = dataToBeIncremented[ index ]; 
} 

然後

db.update({ _id:targetID }, { $inc : query }) 

不過,我可能有成千上萬的雜貨店元素,並找到在每次更新做這個循環是醜陋和未優化。

我想知道如何解決這個問題或爲什麼不能優化。

回答

1

實際上沒有辦法避免它,因爲沒有這樣的命令可以增加子文檔中的所有值。

因此,要做到這一點的唯一方法就是像做你做:

{ 
    "$inc": { 
     "groceries.apples" : 1, 
     "groceries.cherries" : 1, 
     "groceries.prunes" : 1 
    } 
} 

因爲你不知道什麼是完全的領域,你需要先找到他們,創造了$ INC聲明。這些更新有一個好處:不管你有多少元素,你仍然只需要2個查詢(找到要更新的內容並實際執行更新)。

我也在思考如何用不同的模式實現更好的結果,但顯然你必須應付你擁有的東西。

+0

我很害怕這個。乾杯 – Discipol

相關問題