N1QL查询有一个筛选器WHERE myField < $value
。
通过实验,我看到Couchbase对类型的排序如下: boolean < integer < string < JsonArray,尽管从我的角度来看,它们不应该是可比较的。
例如,任何布尔值的计算结果都小于任何整数;任何整数都小于所有字符串。(9223372036854775807
(Long.MAX_VALUE
)计算结果为小于""
(空字符串)。)
我想避免这种类型的强制。我希望"A" < 1
和"A" > 1
为false
,并且不从筛选器返回这样的值。(而且,在Javascript中,这两个表达式似乎都是false
,因为它们应该是。)
强制规则是什么?我如何防止这种情况发生?
发布于 2019-04-01 20:44:50
您已经了解了N1QL的排序顺序。这里有一个更完整的解释:
https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/datatypes.html
如果希望避免这种跨类型的比较,可以使用TYPE()函数添加一个子句,以验证要比较的两个元素是否属于同一类型。
https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/typefun.html
因此,您可以使用($A > 3) AND (TYPE($A) = TYPE(3))
,而不是$A > 3
。
https://stackoverflow.com/questions/55454395
复制相似问题