在 Couchbase Java 查询 DSL 中,我如何过滤 属性-不是来自 ASCII 字母表的名称?
In Couchbase Java Query DSL, how do I filter for property-names that are not from the ASCII alphabet?
Couchbase 查询应支持过滤器中 属性-name 的任何字符串(where
子句。)
但是 returns 下面的查询没有任何 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"}
如何转义 属性 名称或以其他方式在查询中支持这些合法名称?
(这个问题与 有关,但那是关于值的,这是关于字段名称的。)
字段名称被视为标识符。因此,需要反引号来转义它们:
select("*").from(i(bucket.name())).where(x("`" + fieldName + "`").eq(x("$value"))
参数化$value
,当然
Couchbase 查询应支持过滤器中 属性-name 的任何字符串(where
子句。)
但是 returns 下面的查询没有任何 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"}
如何转义 属性 名称或以其他方式在查询中支持这些合法名称?
(这个问题与
字段名称被视为标识符。因此,需要反引号来转义它们:
select("*").from(i(bucket.name())).where(x("`" + fieldName + "`").eq(x("$value"))
参数化$value
,当然