如何避免在Couchbase查询中使用自动强制?

时间:2019-04-01 11:48:00

标签: json couchbase n1ql coercion

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

通过实验,我发现Couchbase对类型的排序如下:布尔值<整数<字符串

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

我想避免这种类型强制。我希望"A" < 1"A" > 1false,并且不要从过滤器中返回此类值。 (而且,似乎在Javascript中,这两个表达式都应该是false。)

强制规则是什么?我该如何预防?

1 个答案:

答案 0 :(得分:2)

您已经找到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))