如何避免 Couchbase 查询中的自动强制转换?

How can I avoid autocoercion in Couchbase queries?

一个 N1QL 查询有一个过滤器 WHERE myField < $value

通过实验,我发现 Couchbase 对类型的排序如下:boolean < integer < string < JsonArray,尽管从我的角度来看它们不应该具有可比性。

例如,任何布尔值的计算结果都小于任何整数;任何整数都小于所有字符串。 (9223372036854775807 (Long.MAX_VALUE) 的计算结果小于 ""(空字符串)。)

我想避免这种类型强制转换。我希望 "A" < 1"A" > 1false 而不是 return 来自过滤器的这些值。 (而且,似乎在 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))