2015-09-17 84 views
1

我需要只檢索有format.prices陣列中的至少一個元素的記錄和price是0到0.99之間和每一個元素:

所以這個工作得很好的price比較:

{ 'formats.prices': { $not: { $elemMatch: { price: { $gt: 0, $lte: 0.99 } } } } } 

但我怎麼可以添加像$not: { $size: 0 }條件也排除了formats.prices沒有在所有的元素嗎?

回答

1

嗯,我這個結束,它工作正常,不知道是否有更好的辦法:

{ 
    'formats.prices': { $not: { $elemMatch: { price: { $gt: 0, $lte: 0.99 } } } }, 
    'formats.prices.0.price': { $exists: true } 
} 
+1

這是更好喜歡它。假設你有一個關於「formats.prices.price」的索引(這可能是一個好主意,考慮到你想要進行範圍查詢,儘管現在是排除在外),那麼這裏的$ exists測試可以實際使用它, $ not:{$ size:0}'不能。儘管如此,對於積極的價格來說,除非你的真實意圖是數組中沒有價格落入該範圍內,否則做一個積極匹配'{'formats.prices.price':{$ gt:0.99}}'會更好。 。這實際上是你如何提出問題的反駁。 –

+0

非常感謝@BlakesSeven很高興這是最好的選擇,對於應用程序的意圖是我誤解了這個問題,因爲我需要沒有價格落在該範圍內(並且至少不是一個)。 (更新它) –