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

问题描述 投票:1回答:1

Couchbase查询应该支持过滤器中的property-name的任何String(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有关,但这与价值观有关,这与字段名称有关。)

couchbase n1ql
1个回答
1
投票

字段名称被视为标识符。因此,需要使用反向标记来逃避它们:

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

当然,还有$value的参数化

© www.soinside.com 2019 - 2024. All rights reserved.