N1QL 查询具有过滤器 WHERE myField < $value
。
通过实验,我发现 Couchbase 按如下方式对类型进行排序:boolean < integer < string < JsonArray,尽管从我的角度来看它们不应该具有可比性。
例如,任何 bool 值的计算结果都小于任何整数;任何整数都小于所有字符串。 ( 9223372036854775807
( Long.MAX_VALUE
) 计算结果小于 ""
(空字符串)。)
我想避免这种类型强制。我要"A" < 1
和"A" > 1
成为false
并且不从过滤器返回此类值。 (而且,在 Javascript 中,这两个表达式似乎都是 false
,因为它们应该是这样。)
强制规则是什么?我该如何防止这种情况发生?
最佳答案
您已经发现了 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
你会有($A > 3) AND (TYPE($A) = TYPE(3))
.
关于json - 如何避免 Couchbase 查询中的自动强制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55454395/