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 回答