如何在mongoose.find中执行dynamic数量的标准?

举个例子,在任何给定的运行时间,

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

但问题是我不知道有多less类将被选中,上面的例子是为2个类设置.find例子。

如何把不同数量的标准dynamic地放入.find函数中?

当然,我可以把所有的标准放在一个string,但查询不是一个string,也不是一个JSON,所以我有点失落。

您可以基于select以编程方式构build查询对象。 例如:

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