我想在Monoose中将两个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
如何在猫鼬中结合AND myModule1和myModule2AND 的两个条件?
myModule1
myModule2
直接按以下方式创建查询对象可能是最简单的:
Test.find({ $and: [ { $or: [{a: 1}, {b: 1}] }, { $or: [{c: 1}, {d: 1}] } ] }, function (err, results) { ... }
但是,您也可以使用Query#and最新的3.x Mongoose版本中提供的帮助程序:
Query#and
Test.find() .and([ { $or: [{a: 1}, {b: 1}] }, { $or: [{c: 1}, {d: 1}] } ]) .exec(function (err, results) { ... });