dongmo20030416 2019-09-05 10:36
浏览 211

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

In the golang Couchbase SDK there are N1QL select examples documented with examples like this:

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)

When I try it with the following, it doesn't find any records.

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
}

But this does work and also works in the Couchbase console:

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

Am I doing anything obviously wrong here?

While the non-parametised option works I'd like to use the parametised one and mark it as a prepared statement with query.AdHoc(false)

  • 写回答

1条回答 默认 最新

  • du7999 2019-09-05 15:41
    关注
    gocb.NewN1qlQuery("SELECT * FROM `bucket` WHERE META().id LIKE 'TD:$1:%'")
    

    In above code your query parameter is include inside the quotes. query parameters inside string will not be replaced. So it is looking for document id "TD:$1:"

    You should try this

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

    OR

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

    OR

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

报告相同问题?

悬赏问题

  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条