如何在mongoose.find中执行动态数量的条件?

时间:2013-03-20 18:50:54

标签: javascript node.js mongodb mongoose

例如,在任何给定的运行时,

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,所以我有点迷失。

1 个答案:

答案 0 :(得分:4)

您可以根据选择以编程方式构建查询对象。例如:

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){
  //...
}