2017-07-15 16 views
0

いくつかのパラメータに基づいて私のMongo DBを照会する必要があります。しかし、パラメータを取得するには、まずfind()を使用してから計算を行う必要があります。計算された差に基づいて検索

これは明らかに効率的ではありません。

私は詳しく説明してみましょう:

ここで私が照会したい私のコレクションである:私はaCounterどこの記事を見つけたい

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

- bCounter以上ですが。

私はモデルとすべての準備ができていますが、find()パラメータに入れるべきものについてはわかりません。

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

任意の入力が役立ちます。

おかげ

答えて

1

つのオプション:

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

後者は実際にそれが使用しているため、より良いです:

使用$where

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

または$redact.aggregate()を使用して、実際よりパフォーマンス"nati 「コード化された」演算子を使用することができます。$whereが使用するJavaScript評価とは対照的です。

可能であれば、どちらもインデックスを実際に使用して自身の結果をスピードアップすることができないため、両方とも通常のクエリ式と組み合わせる必要があります。

+0

ありがとうNeil!私は彼らに両方の権利を与えている –

+0

解決策2は私のために働いた。ありがとう。私はいくつかの他の問題があります(比率を見つけるために算術計算を入れ子にする必要があります)が、私はこの投稿をハイジャックしたくありませんでした。 –

+1

@ShayanKhanそしてあなたは[答えが実際の質問に答えるときには尋ねません](https://meta.stackoverflow.com/q/252113/2313887)。要件が異なる場合は、正しい手順が1になります。1.質問に記載されていない実際の要件を適用するために与えられた回答から学びます。あなたの実際の要件に答えをどのように適応させるかがわからない場合は、[新しい質問](https://stackoverflow.com/questions/ask)を開きます。いかなる場合でも、あなたはいつもAと答えてください。あなたの投稿や答えを変更してください。B.質問した質問とは異なる要件への回答を提供してください。 –

関連する問題