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);
但是我的存储桶确实有每个这些JsonObject,包括那些具有不寻常属性名称的JsonObject,如未经过滤的查询所示:
{"a":"a"}
{"#":"a"}
{"&":"a"}
{"":"a"}
{"?":"a"}
如何在查询中转义属性名称或以其他方式支持这些合法名称?
(此问题与another one有关,但这与值有关,而与字段名称有关。)
答案 0 :(得分:1)
字段名称被视为标识符。因此,需要用反引号将其转义:
select("*").from(i(bucket.name())).where(x("`" + fieldName + "`").eq(x("$value"))
当然具有参数$value