我不确定它是否在您预期的解决方案范围内,但为什么不使用 .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}
});
附: : 我没有直接运行这个查询。我可能有一些语法错误。
请查看此页面以获取更多参考
http://sailsjs.com/documentation/reference/waterline-orm/models/query
编辑:对不起,我误解了这个问题,但是对于 mongoDB,您必须使用 native() 方法。应该是这样的
var queryCriteria = {
"$and" : [{"$or" : [{ "score" : null },{"activity" : null}] },{"$or" : [{
"invitedby" : null },{"invited" : null}] } ]
}
那么就可以像这样使用native方法了
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);
});
});
P.P.S:MongoDB 没有架构。因此,如果您在创建数据时没有明确输入 null ,则不会创建该字段,即数据可能根本没有 score 字段,在这种情况下,您必须替换 null will {$exists: false} 。我之前也使用过这种本机方法,在我的
经验非常有限,速度很慢。我记得在我的一个案例中,transactionPerSecond 仅约为 10。请注意。
.native() 的链接http://sailsjs.com/documentation/reference/waterline-orm/models/native