Как в Couchbase Java Query DSL фильтровать имена свойств, которые не принадлежат алфавиту ASCII? - PullRequest
1 голос
/ 25 марта 2019

Запросы Couchbase должны поддерживать любую строку для имени свойства в фильтре (where предложение.)

Но приведенный ниже запрос не возвращает значений для любого из fieldNames "7", "a", "#", "&", "", "?". Это работает для значений для fieldName a.

Обратите внимание, что я использую Java DSL API, а не N1ql напрямую.

OffsetPath statement = select("*").from(i(bucket.name())).where(x(fieldName).eq(x("$t")));
JsonObject placeholderValues = JsonObject.create().put("t", fieldVal);
N1qlQuery q = N1qlQuery.parameterized(statement, placeholderValues);
N1qlQueryResult result = bucket.query(q);

Но в моем сегменте есть каждый из этих JsonObjects, включая объекты с необычными именами свойств, как показано в нефильтрованном запросе:

{"a":"a"}
{"#":"a"}
{"&":"a"}
{"":"a"}
{"?":"a"}

Как мне избежать имен свойств или иным образом поддерживать эти допустимые имена в запросах?

(Этот вопрос относится к другому , но речь идет о значениях и об именах полей.)

1 Ответ

1 голос
/ 25 марта 2019

Имя поля рассматривается как идентификатор. Итак, обратные галочки необходимы, чтобы избежать их таким образом:

select("*").from(i(bucket.name())).where(x("`" + fieldName + "`").eq(x("$value"))

с параметризацией $value, конечно

...