在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)将其标记为预准备语句
发布于 2019-09-05 23:41:36
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+":%'")https://stackoverflow.com/questions/57803571
复制相似问题