2016-01-11 50 views
1

我試圖找到一種方法來傳遞參數來查詢,但不是很確定如何。 web site上的API看起來有點過時了?golang Couchbase n1ql查詢將參數傳遞給?

myQuery := gocb.NewN1qlQuery("SELECT * FROM default") 
rows, err := myBucket.ExecuteN1qlQuery(myQuery) 
if err != nil { 
    fmt.Printf("N1QL query error: %s\n", err) 
} 
var row interface{} 
for rows.Next(&row) { 
    fmt.Printf("Row: %+v\n", row) 
} 
if err := rows.Close(); err != nil { 
    fmt.Printf("N1QL query error: %s\n", err) 
} 

因爲,實際上ExecuteN1qlQuery需要兩個參數:

func (b *Bucket) ExecuteN1qlQuery(q *N1qlQuery, params interface{}) (ViewResults, error) 

我不知道是如何使用它...像我想創建一個佔位符的查詢,並通過值ExecuteN1qlQuery通過params。像SQL一樣(準備 - >執行)。例如這樣的事情:

myQuery := gocb.NewN1qlQuery("SELECT * FROM default where a=? and b=?") 
    rows, err := myBucket.ExecuteN1qlQuery(myQuery,[]string{"b","c"}) 
    if err != nil { 
     fmt.Printf("N1QL query error: %s\n", err) 
    } 
    var row interface{} 
    for rows.Next(&row) { 
     fmt.Printf("Row: %+v\n", row) 
    } 
    if err := rows.Close(); err != nil { 
     fmt.Printf("N1QL query error: %s\n", err) 
    } 

回答

2

你貼怎麼辦做,這是從我們的開發人員指南迴購在GitHub上的例子:

https://github.com/couchbaselabs/devguide-examples/blob/master/go/query-placeholders.go

基本上,你正在使用$它引用一個接口和一個對應的位置參數開頭的1

爲了您例如,它看起來是這樣的:

// Setup a new query with a placeholder 
myQuery := gocb.NewN1qlQuery("SELECT * FROM default where a=$1 and b=$2") 

// Setup an array for parameters 
var myParams []interface{} 
myParams = append(myParams,"foo") 
myParams = append(myParams,"bar") 

// Execute Query 
rows, err := bucket.ExecuteN1qlQuery(myQuery, myParams) 
if err != nil { 
    fmt.Println("ERROR EXECUTING N1QL QUERY:", err) 
} 

// Iterate through rows and print output 
var row interface{} 
for rows.Next(&row) { 
    fmt.Printf("Results: %+v\n", row) 
} 
+0

你覺得我的鏈接回購不夠好? :-) 這個例子解決了我所有的問題。 問題是找到這個例子,它並不是很直接的方式,可能是因爲我期待的更多來自於couchbase站點 – MikeKlemin

+0

Mike,我們一直致力於改進文檔 - 尤其是開發指南。感謝您發佈這個問題。 – ToddGreenstein

0

只是found example

 myQuery := gocb.NewN1qlQuery("SELECT airportname, city, country FROM `travel-sample` " + 
     "WHERE type='airport' AND city=$1 ") 

    // Setup an array for parameters 
    var myParams []interface{} 
    myParams = append(myParams, "Reno") 

    // Execute Query 
    rows, err := bucket.ExecuteN1qlQuery(myQuery, myParams)