代码之家  ›  专栏  ›  技术社区  ›  hookenz

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

  •  0
  • hookenz  · 技术社区  · 6 年前

    在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)
    

    我是不是做错了什么?

    虽然非参数化选项有效,但我想使用参数化选项,并将其标记为带有查询的准备语句。临时(假)

    0 回复  |  直到 6 年前
        1
  •  0
  •   vsr    6 年前
    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+":%'")