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

标签 json couchbase sql++ coercion

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/

相关文章:

go - 区分子文档操作错误和特定路径上丢失的数据

elasticsearch - 默认情况下,为elasticsearch中与couchbase同步的文档创建的couchbaseCheckPoint类型

java - 如何在自定义 Spring Boot N1QL 查询中使用百分号和 LIKE 来与 Couchbase DB 一起使用

java - 从 recyclview 添加 jsonarray

json - Curl 和 jq 替换值中的子字符串

Couchbase N1QL 想要返回并计数

Couchbase N1QL 连接查询 - 语法错误

node.js - 如何在 N1QL 和 Couchbase 中创建索引并使用 join

javascript - 从 URL 读取 JSON

javascript - 从 HTML 应用程序通过 TCP IP 客户端发送短字符串的最佳方式