2015-10-07 23 views
0

我有一個完整的,看起來對象的數據庫〜完全一樣(爲了清楚而簡化):比較相同的子文檔內的值findOne()的MongoDB]

{ 
    "_id": "GIFT100", 
    "price": 100, 
    "priceHistory": [ 
     100, 110 
    ], 
    "update": 1444183299242 
} 

我想要做的就是創建MongoJS(或MongoDB和我可以找出其餘的)查詢文件,查找priceHistory [0] < priceHistory [1]

我想我的查詢文檔返回上述記錄作爲結果。或者,我可以更改我的文檔代碼來比較價格< priceHistory [0]但我相信這仍然會導致相同的問題(比較同一文檔中的值)。

任何幫助將不勝感激,我用盡了我的谷歌foo。

編輯:

我想返回一組表示自從我們上次掃描(每日執行)價格下降的記錄。基本上來說,我不能控制來自數據源的一組「銷售」項目。

+0

你能或許可以解釋點這可能是更好的方法。這樣做你真的想在這裏實現什麼?請注意*「我不想比較價格」*不是我們在這裏尋找的澄清,而是你爲什麼「認爲」你需要這樣做,並且爲了什麼目的? –

+0

我想返回一組記錄,表示自上次掃描(每日執行)以來的價格下跌。基本上來說,我不能控制來自數據源的一組「銷售」項目。 – wblaschko

回答

1

您可以使用$where子句,但要小心 - 它很慢,不能使用索引,並且它將執行全表掃描。通過對要使用比較什麼的Javascript:

db.collection.findOne({$where: "priceHistory[0] < priceHistory[1]"}) 

此外,您可以跳過$where聲明,如果這是你通過查詢的唯一的事情:

db.collection.findOne("priceHistory[0] < priceHistory[1]") 
+0

非常好。你說得對,它很慢,但它會做(小〜1000分的物品)。感謝您將我指向$,我將確保在將來濫用它。 – wblaschko