例如,在任何给定的运行时,
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,所以我有点迷失。
答案 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){
//...
}