使用具有嵌套或条件的多个 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
如何在 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