2017-04-14 7 views
0

考えられるのは、配列が定義されている場合は、指定された配列にフィールドが含まれているか、配列が定義されていない場合はすべてのドキュメントに含まれるドキュメントを取得することです(JSで)。MongoDB

$ in引数にその動作を無効にするパラメータを1つのライナーとして使用できるようにするためのエレガントな手段があるかどうかは不思議でした。このような条件付きリクエストをよりエレガントにする必要があると私は考えています。

はここでマングースを使用して、スニペットです:

let query = SomeModel.find(); 
if (someArray) { 
    query = query.where(someField).in(someArray); 
} 
query.exec(); 

確かに、それは動作しますが、それはとてもとてもクールではない、変数にクエリを保存する必要があります。

答えて

0

集約が役立つ可能性があります。

let itemValues = someArray || []; 
SomeModel.aggregate([ 
{ 
    $match: { 
     "someField": { 
      [itemValues.length > 0 ? "$in" : "$nin"]: itemValues} 
     } 
} 
]).exec() 
+0

Fine!私は、$ ninを使ってパフォーマンスが低下しているかどうかを調べるつもりです。 – Cobaltway

+0

ベンチマークテストの結果を知りたいです。 – Anand