2017-07-15 83 views
0

我需要根據一些參數查詢我的Mongo DB。但是,要獲取參數,我首先需要使用find(),然後進行一些計算。根據計算出的差異查找

這顯然不是有效的。

讓我解釋:

這是我收藏我要查詢:

{ 
    "title": "1", 
    "description": "1", 
    "aCounter": 100, 
    "bCounter": 20, 
    "__v": 0 
} 

我想找到帖裏aCounter - bCounter超過。

我有模型和一切準備就緒,但不知道要在find()參數中放什麼。

postModel.find({ 
    //I don't know what to put here 
}) 
.exec(function(err, posts) { 
    if(posts){ 
    //return the data 
    } 
}); 

任何輸入都會有所幫助。

感謝

回答

1

兩個選項:

使用$where

postModel.find({ "$where": "(this.aCounter - this.bCounter) > 50" }) 

或者實際上具有更好的性能使用$redact.aggregate()

postModel.aggregate([ 
    { "$redact": { 
    "$cond": { 
     "if": { 
     "$gt": [ 
      { "$subtract": [ "$aCounter", "$bCounter" ] }, 
      50 
     ] 
     }, 
     "then": "$$KEEP", 
     "else": "$$PRUNE" 
    } 
    }} 
]) 

後者是更好的真的是因爲它使用「那提已經編碼「的操作符,而不是使用$where的JavaScript評估。

儘可能地,兩者都應該與常規查詢表達式結合使用,因爲它們都不能實際使用索引來加速它自己的結果。

+0

謝謝尼爾!我給他們兩個去遠方 –

+0

解決方案2爲我工作。謝謝。我還有其他一些問題(需要嵌套算術計算來找到比例),但我不想劫持這篇文章。 –

+1

@ShayanKhan所以你[不應該當一個答案解決實際問題](https://meta.stackoverflow.com/q/252113/2313887)。如果您有不同的要求,那麼正確的程序要麼是1.從給出的答案中學習,以便應用您在問題中未表示的實際需求。 2. [提出新問題](https://stackoverflow.com/questions/ask)如果您不確定如何根據實際需求調整答案。在任何情況下,你都不應該A.改變你的帖子或答案B.提供一個不同於要求的問題的要求的答案。 –