使用具有嵌套或条件的多个 where(或 AND)?
Posted
技术标签:
【中文标题】使用具有嵌套或条件的多个 where(或 AND)?【英文标题】:Using multiple where(or AND) which have nested or condition? 【发布时间】:2017-10-22 09:22:22 【问题描述】:如何在 Sailjs 中使用 Waterline ORM 在 mongodb 中进行一个查询,其中有多个 AND 条件,每个 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 道具中使用所有条件也会破坏逻辑。
有什么解决办法吗?
【问题讨论】:
【参考方案1】:我不确定它是否在您预期的解决方案范围内,但为什么不使用 .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
【讨论】:
我正在尝试在 Mongodb 中运行查询,如果您看到我想使用水线模型(如果可能的话)将示例 mysql 查询映射到 mongodb 的问题。 是的,实际上是这样,默认水线的支持非常有限。无论如何,谢谢。以上是关于使用具有嵌套或条件的多个 where(或 AND)?的主要内容,如果未能解决你的问题,请参考以下文章