在Couchbase Java Query DSL中,如何过滤不是来自ASCII字母的属性名称



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 中的每一个,包括那些具有异常属性名称的对象,如未过滤的查询所示:

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

如何在查询中转义属性名称或以其他方式支持这些法定名称?

(这个问题与另一个问题有关,但这是关于值的,这是关于字段名称的。

字段名称被视为标识符。因此,需要反勾号来转义它们:

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

当然,随着$value的参数化

最新更新