使用N1QL查询Couchbase

him*_*ami 3 f# couchbase sql++

我可以使用视图查询文档,但切换到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
Run Code Online (Sandbox Code Playgroud)

Pan*_*vos 5

SET是N1QL中的保留字.要将其用作标识符,您需要使用反引号来转义它,例如:

SELECT * FROM mydoc where `SET` = 'SET24MM2SCLV01'
Run Code Online (Sandbox Code Playgroud)

如果你不这样做,你会收到语法错误:

"errors": [
    {
        "code": 3000,
        "msg": "syntax error - at SET"
    }
]
Run Code Online (Sandbox Code Playgroud)

您应该将查询更改为

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

let query = "SELECT * FROM mydoc where `SET` = 'SET24MM2SCLV01'"
Run Code Online (Sandbox Code Playgroud)

编辑

查询结果还包含一个Error属性,其中包含查询出现的错误.如果Success返回false,则应始终检查此项.如果查询在转义后仍然失败SET,这将解释其他错误阻止查询运行的原因.

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