如何在Sails.js中使用Waterline检查值是否为Null或空白
在Sails.js的Waterline中查询Null或空白值的正确方式
你遇到的问题是因为Waterline的数组查询([value1, value2])在处理null和空字符串时,不能直接这样用。Waterline提供了更精准的查询操作符来处理这类场景,下面是两种可行的解决方案:
方案一:使用or查询组合条件
你可以通过or操作符来分别匹配Date为null或者空字符串的情况,同时结合Status的数组查询:
var query = { Status: [1, 2, 3], or: [ { Date: null }, { Date: '' } ] }; table.count(query).exec(function (err, count) { if (err) { return res.badRequest(err); } return res.send(count); });
方案二:使用Waterline的查询操作符(更清晰)
如果想更明确地表达查询逻辑,可以用Waterline的isNull和equals操作符:
var query = { Status: [1, 2, 3], or: [ { Date: { isNull: true } }, { Date: { equals: '' } } ] }; table.count(query).exec(function (err, count) { if (err) { return res.badRequest(err); } return res.send(count); });
为什么原来的写法不行?
Waterline的数组语法(Date: [null, ''])本质上是执行IN查询,但SQL的IN操作符对null的处理是特殊的——column IN (null, '')不会匹配到null值(因为SQL中null = null不成立),所以必须用IS NULL来单独判断null的情况,这就是上面两种方案的核心逻辑。
内容的提问来源于stack exchange,提问作者Pratik Gadoya
相关产品推荐
相关产品推荐

