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

Using multiple where(or AND) which have nested or condition?

如何在 Sailjs 中使用 Waterline ORM 在 mongodb 中使用多个 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 中的所有条件也破坏了逻辑。

有什么解决办法吗?

我不确定它是否在您预期的解决方案范围内,但为什么不使用 .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}


});

P.S。 : 我没有直接 运行 这个查询。我可能有一些语法错误。

请查看此页面以获取更多参考 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,则不会创建该字段,即数据可能根本没有得分字段,在这种情况下,您必须将 null 替换为 {$exists: false}。我以前也使用过这种本机方法,在我的 经验非常有限,速度非常慢。我记得在我的一个案例中获得的 transactionPerSecond 仅为 10 左右。请注意。

Link 对于 .native() http://sailsjs.com/documentation/reference/waterline-orm/models/native