2

例として、任意の実行時に、

Books = { CatSelect : ["SciFi", "Humor", "History"], MinPages : [300,50,500] };

以下の関数で手動でクエリを作成するfindと、意図したとおりに機能し、指定されたカテゴリで指定された量よりも多いページ数の本が見つかります。

MyCollection.find({ $or: [ { Category: Books.CatSelect[0], Pages : { $gte: Books.MinPages[0] } }, { Category: Books.CatSelect[1], Pages : { $gte: Books.MinPages[1] } } ] }).execFind(function(err,result){
...
}

しかし、問題は、選択されるカテゴリの数がわからないことです。上記の例は.find、2つのカテゴリの設定例です。

.findさまざまな数の基準を動的に関数に入れる方法は?

当然、すべての基準を文字列に入れることができますが、クエリは文字列でもJSONでもないので、ちょっと迷っています。

4

1 に答える 1

5

選択内容に基づいて、プログラムでクエリオブジェクトを作成できます。例えば:

var selections = [0, 1];
var query = { $or: [] };
for (var i=0; i<selections.length; i++) {
  var selection = selections[i];
  query.$or.push({ 
    Category: Books.CatSelect[selection], 
    Pages: { $gte: Books.MinPages[selection] } 
  });
}
MyCollection.find(query).exec(function(err, result){
  //...
}
于 2013-03-28T03:46:58.863 に答える