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

如何在go SDK中使用Couchbase N1QL查询扩展,go,couchbase,n1ql,Go,Couchbase,N1ql,在golang Couchbase SDK中,有N1QL select示例,其中包含以下示例: myQuery := gocb.NewN1qlQuery("SELECT airportname, city, country FROM `travel-sample` " + "WHERE type='airport' AND city=$1 ") myParams = append(myParams, []interface{}{"Reno"}) rows, err := buck

在golang Couchbase SDK中,有N1QL select示例,其中包含以下示例:

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)将其标记为一个准备好的语句

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

你应该试试这个

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+":%'")