使用 N1QL 保留字
Using N1QL reserved words
我有一个结构为 { doc.data.role.level } 的文档,我想访问级别 属性,
但是使用这个查询
SELECT r.data.role.level FROM `hostel` r where r.id = '12345678Z'
我收到错误消息
"msg": "syntax error - at role",
但是对于这些查询我没有得到任何结果
SELECT r.data.`role`.level FROM `hostel` r where r.id = '12345678Z'
SELECT `r.data.role.level` FROM `hostel` r where r.id = '12345678Z'
你是在正确的轨道上用反引号转义保留字。
如果您没有收到错误消息,那么我怀疑这是您的 WHERE
子句。您确定您的文档中有 "id" 字段吗?
{ "id": "12345678Z", "foo": "bar", ... etc ... }
或者您是否尝试根据文档 ID 进行查询(在下面的屏幕截图中,文档中没有 "id" 字段)?
如果是后者,那么你应该使用META().id:
SELECT * FROM `testbucket` r where META(r).id = '12345678Z'
我知道这可能看起来有点令人困惑,但 "id" 并不是 Couchbase 中的魔法领域。这是一个和其他领域一样的领域。文档的实际 ID 在文档的 元数据 .
中
还有一个建议:如果你想通过它的 ID 获得一个单个文档,你最好使用key/value API 而不是 N1QL 查询。无需涉及 query/index 服务的开销。
如果 fields/identifiers 或保留关键字中有特殊字符,您必须按照 https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/identifiers.html
所述使用反引号(即转义标识符)对它们进行转义
示例 1:
"role" 是保留关键字
{
"id":"12345678Z",
"data":{"role":{"level":3}}
}
SELECT r.data.`role`.level
FROM hostel AS r
WHERE r.id = "12345678Z";
示例 2:
字段有特殊字符点。您必须转义整个字段名称(以解释为字段与嵌套文档)。
{
"id":"12345678Z",
"data.role.level":5
}
SELECT r.`data.role.level`
FROM hostel AS r
WHERE r.id = "12345678Z";
示例 3:
旅馆是数组。如果您正在查看数组内部,则必须使用任何语法。
{
"hostels": [ { "id":"12345678Z"},
{ "id":"34545678Z"}}
]
"data":{"role":{"level":3}}
}
SELECT r.data.`role`.level
FROM hostel AS r
WHERE ANY h IN r.hostels SATISFIES h.id = "12345678Z" END;
我有一个结构为 { doc.data.role.level } 的文档,我想访问级别 属性, 但是使用这个查询
SELECT r.data.role.level FROM `hostel` r where r.id = '12345678Z'
我收到错误消息
"msg": "syntax error - at role",
但是对于这些查询我没有得到任何结果
SELECT r.data.`role`.level FROM `hostel` r where r.id = '12345678Z'
SELECT `r.data.role.level` FROM `hostel` r where r.id = '12345678Z'
你是在正确的轨道上用反引号转义保留字。
如果您没有收到错误消息,那么我怀疑这是您的 WHERE
子句。您确定您的文档中有 "id" 字段吗?
{ "id": "12345678Z", "foo": "bar", ... etc ... }
或者您是否尝试根据文档 ID 进行查询(在下面的屏幕截图中,文档中没有 "id" 字段)?
如果是后者,那么你应该使用META().id:
SELECT * FROM `testbucket` r where META(r).id = '12345678Z'
我知道这可能看起来有点令人困惑,但 "id" 并不是 Couchbase 中的魔法领域。这是一个和其他领域一样的领域。文档的实际 ID 在文档的 元数据 .
中还有一个建议:如果你想通过它的 ID 获得一个单个文档,你最好使用key/value API 而不是 N1QL 查询。无需涉及 query/index 服务的开销。
如果 fields/identifiers 或保留关键字中有特殊字符,您必须按照 https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/identifiers.html
所述使用反引号(即转义标识符)对它们进行转义示例 1: "role" 是保留关键字
{
"id":"12345678Z",
"data":{"role":{"level":3}}
}
SELECT r.data.`role`.level
FROM hostel AS r
WHERE r.id = "12345678Z";
示例 2: 字段有特殊字符点。您必须转义整个字段名称(以解释为字段与嵌套文档)。
{
"id":"12345678Z",
"data.role.level":5
}
SELECT r.`data.role.level`
FROM hostel AS r
WHERE r.id = "12345678Z";
示例 3: 旅馆是数组。如果您正在查看数组内部,则必须使用任何语法。
{
"hostels": [ { "id":"12345678Z"},
{ "id":"34545678Z"}}
]
"data":{"role":{"level":3}}
}
SELECT r.data.`role`.level
FROM hostel AS r
WHERE ANY h IN r.hostels SATISFIES h.id = "12345678Z" END;