Как я могу избежать самовведения в запросах Couchbase? - PullRequest
2 голосов
/ 01 апреля 2019

N1QL-запрос имеет фильтр WHERE myField < $value.

Из экспериментов я вижу, что Couchbase упорядочивает типы следующим образом: boolean

Например, любое логическое значение оценивается как меньшее целого числа; любое целое число меньше всех строк. (9223372036854775807 (Long.MAX_VALUE) оценивается как "" (пустая строка).)

Я хочу избежать этого принуждения. Я хочу, чтобы "A" < 1 и "A" > 1 были false и не возвращали такие значения из фильтра. (А также, кажется, что в Javascript оба эти выражения false, как и должно быть.)

Каковы правила принуждения? Как мне предотвратить это?

1 Ответ

2 голосов
/ 01 апреля 2019

Вы обнаружили порядок сопоставления 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)).

...