Skip to main content
 首页 » 编程设计

go之如何在go SDK中使用Couchbase N1QL查询扩展

2024年02月20日24三少

在 golang Couchbase SDK 中,有 N1QL 选择示例,其中包含如下示例:

myQuery := gocb.NewN1qlQuery("SELECT airportname, city, country FROM `travel-sample` " + 
        "WHERE type='airport' AND city=$1 ") 
myParams = append(myParams, []interface{}{"Reno"}) 
rows, err := bucket.ExecuteN1qlQuery(myQuery, myParams) 

当我尝试使用以下内容时,它没有找到任何记录。

query := gocb.NewN1qlQuery("SELECT * FROM `bucket` WHERE META().id LIKE 'TD:$1:%'") 
 
rows, err := r.Bucket.ExecuteN1qlQuery(query, []interface{}{userid}) 
if err != nil { 
    return nil, err 
} 

但这确实有效,并且在 Couchbase 控制台中也有效:

query := gocb.NewN1qlQuery("SELECT * FROM `bucket` WHERE META().id LIKE 'TD:"+userid+":%'") 
rows, err := bucket.ExecuteN1qlQuery(query, nil) 

我在这里做了什么明显错误的事情吗?

虽然非参数化选项有效,但我想使用参数化选项并将其标记为带有 query.AdHoc(false) 的准备好的语句

请您参考如下方法:

gocb.NewN1qlQuery("SELECT * FROM `bucket` WHERE META().id LIKE 'TD:$1:%'") 

在上面的代码中,您的查询参数包含在引号内。字符串内的查询参数不会被替换。所以它正在寻找文档 id“TD:$1:”

你应该试试这个

gocb.NewN1qlQuery("SELECT * FROM `bucket` WHERE META().id LIKE 'TD:' || $1 || ':%' ") 

或者

   gocb.NewN1qlQuery("SELECT * FROM `bucket` WHERE META().id LIKE $1") 
    Pass $1  'TD:'+userid+':%'  

或者

gocb.NewN1qlQuery("SELECT * FROM `bucket` WHERE META().id LIKE 'TD:"+userid+":%'")