在Mongoose中将两个OR查询与AND结合在一起

我想在单声道中将两个OR查询与AND结合起来,就像在这个SQL语句中一样:

SELECT * FROM ... WHERE (a = 1 OR b = 1) AND (c=1 OR d=1) 

我在一个只从主应用程序获取模型对象的NodeJS模块中试过这个:

 /********** Main application ***********/ var query = MyModel.find({}); myModule1.addCondition(query); myModule2.addCondition(query); query.exec(...) /************ myModule1 ***************/ exports.addCondition = function(query) { query.or({a: 1}, {b: 1}); } /************ myModule2 ***************/ exports.addCondition = function(query) { query.or({c: 1}, {d: 1}); } 

但是这不起作用,所有的OR条件都会像这个SQL语句一样被连接在一起:

 SELECT * FROM ... WHERE a = 1 OR b = 1 OR c=1 OR d=1 

我如何将myModule1myModule2的两个条件与Mongoose中的AND myModule2使用?

直接创build查询对象可能是最简单的:

  Test.find({ $and: [ { $or: [{a: 1}, {b: 1}] }, { $or: [{c: 1}, {d: 1}] } ] }, function (err, results) { ... } 

但是您也可以使用最近的3.x Mongoose发行版中提供的Query#and Helper:

  Test.find() .and([ { $or: [{a: 1}, {b: 1}] }, { $or: [{c: 1}, {d: 1}] } ]) .exec(function (err, results) { ... });