使用N1QL保留字

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

我有一个结构为{doc.data.role.level}的文档,我想访问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'    
couchbase n1ql
2个回答
0
投票

如果字段/标识符或保留关键字中有特殊字符,则必须按照https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/identifiers.html的说明,使用反引号(即,转义的标识符)对它们进行转义>

示例1:“角色”是备用关键字

{
 "id":"12345678Z",
 "data":{"role":{"level":3}}
}

SELECT r.data.`role`.level
FROM hostel AS r
WHERE r.id = "12345678Z";

示例2:字段具有特殊字符点。您必须转义整个字段名称(以解释为字段vs嵌套文档)。

{
 "id":"12345678Z",
 "data.role.level":5
}

SELECT r.`data.role.level`
FROM hostel AS r
WHERE r.id = "12345678Z";

示例3:旅馆是数组。如果要查看数组内部,则必须使用ANY语法。

{
 "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;

0
投票

您正走右引号,可以逃脱保留字。

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