4

我可以很好地使用视图查询文档,但是切换到 N1QL 会使我的 Success 属性为 false。什么地方出了错 ?

    let cluster = new Cluster()
    let bucket = cluster.OpenBucket("mydoc","")
    let query = """SELECT * FROM mydoc where SET = 'SET24MM2SCLV01'"""
    let result = bucket.Query(query)
    Console.WriteLine(result.Success) //would give false
4

1 回答 1

6

SET是 N1QL 中的保留字。为了将其用作标识符,您需要使用反引号对其进行转义,例如:

SELECT * FROM mydoc where `SET` = 'SET24MM2SCLV01'

如果你不这样做,你会得到一个语法错误:

"errors": [
    {
        "code": 3000,
        "msg": "syntax error - at SET"
    }
]

您应该将查询更改为

让查询 = """SELECT * FROM mydoc where SET= 'SET24MM2SCLV01'"""

let query = "SELECT * FROM mydoc where `SET` = 'SET24MM2SCLV01'"

编辑

查询结果还包含一个Error属性,其中包含查询中发生的错误。Success如果返回 false,则应始终检查这一点。如果即使在转义后查询仍然失败SET,这将解释还有什么其他错误会阻止查询运行。

例如,我刚刚注意到整个查询用双引号括起来。这会将字符串文字而不是查询发送到服务器。

于 2015-09-15T07:20:20.113 回答