使用嵌套或条件的多个where(或AND)?

如何在mongodb中使用水线ORM在Sailjs中进行查询,使用多个AND条件,每个条件都具有嵌套OR条件。

一个示例MySQL查询将是:

SELECT * FROM Users WHERE (score IS NULL OR activity IS NULL) AND (invited IS NULL OR invited_by IS NULL) 

使用多个.where()似乎不工作,也使用OR prop中的所有条件销毁逻辑。

任何解决scheme?

我不确定它是否在您的预期解决scheme的范围内,但为什么不.query()方法。

 Users.query('SELECT * FROM Users WHERE (score IS NULL OR activity IS NULL) AND (invited IS NULL OR invited_by IS NULL)', [ ] ,function(err, result) { if (err) { // do something } else {// do something else with the result} }); 

PS:我没有直接运行这个查询。 我的部分可能有一些语法错误。

请查看此页面以获取更多参考http://sailsjs.com/documentation/reference/waterline-orm/models/query

编辑:对不起,我误解了这个问题,但是用mongoDB你必须使用native()方法。 应该是这样的

 var queryCriteria = { "$and" : [{"$or" : [{ "score" : null },{"activity" : null}] },{"$or" : [{ "invitedby" : null },{"invited" : null}] } ] } 

然后你可以使用像这样的本地方法

 Users.native(function(error, collection) { if (error) return res.serverError(error); collection.find(queryCriteria ,{}).toArray(function (err, results) { if (err) return res.serverError(err); return res.ok(results); }); }); 

PPS:MongoDB没有模式。 因此,如果在创build数据时没有明确input空值,那么该字段将不会被创build,即数据可能根本没有分数字段。在这种情况下,您必须replacenull {$ exists:false}。 此外,我曾经使用过这种本地方法,在我非常有限的经验,这是非常慢的..我记得在我的情况下,只有大约10 transactionPerSecond。 请参阅。

.native()链接http://sailsjs.com/documentation/reference/waterline-orm/models/native