View 如何访问couchbase视图中的值?
我有一个widget.json文件,它被加载到couchbase中的文档中:View 如何访问couchbase视图中的值?,view,go,couchbase,View,Go,Couchbase,我有一个widget.json文件,它被加载到couchbase中的文档中: { "type": "widget", "name": "clicker", "description": "clicks!" } 我还有一个couchbase设计文档,couchbase.ddoc,用于bucket。其注册名称为“视图”: 还有一些golang代码,使用couchbase golang API获取它: opts := map[string]interface{}{ "stale":
{
"type": "widget",
"name": "clicker",
"description": "clicks!"
}
我还有一个couchbase设计文档,couchbase.ddoc,用于bucket。其注册名称为“视图”:
还有一些golang代码,使用couchbase golang API获取它:
opts := map[string]interface{}{
"stale": false
}
data, _ := bucket.View("views", "all_widgets", opts)
在这一点上,我还有几个问题:
type User struct {
Name string `json:"name"`
Id string `json:"id"`
}
err = bucket.Get("1", &user)
if err != nil {
log.Fatalf("Failed to get data from the cluster (%s)\n", err)
}
fmt.Printf("Got back a user with a name of (%s) and id (%s)\n", user.Name, user.Id)
github.com/couchbaselabs/go-couchbase
,则可以使用bucket.ViewCustom
解决问题。它接受一个查看解析结果的项
bucket.View
只是使用预定义的结构调用bucket.ViewCustom
,并返回它
执行的视图结果是一个json对象,如下所示
{
"total_rows": 123,
"rows": [
{
"id": "id of document",
"key": {key you emitted},
"value": {value you emitted},
"doc": {the document}
},
...
]
}
我们知道这个结构,可以手动将struct type设置为bucket.ViewCustom
在您的情况下,您可以像这样为“所有_小部件”编写自定义视图结构
type AllWidgetsView struct {
Total int `json:"total_rows"`
Rows []struct {
ID string `json:"id"` // document id
Key string `json:"string"` // key you emitted, the 'meta.id'
Value string `json:"value"` // value you emitted, the 'doc.name'
} `json:"rows"`
}
并使用bucket.ViewCustom
检索值
var result AllWidgetsView
opts := map[string]interface{}{}
viewErr := bucket.ViewCustom("views", "all_widgets", opts, &result)
if viewErr != nil {
// handle error
}
如果这种代码模式经常出现,您可以重构它
有效搜索 对于问题2,它与golang无关,而是Couchbase本身 视图有一些bucket没有的特性。查看结果按键排序,因此您可以指定结果开始位置的
startkey
选项。您可以使用此属性并创建用于搜索的视图。有关更多信息,请参阅
但您需要更详细的搜索,如全文搜索,您应该使用或来完成。
(注意,
N1QL
是预览版,尚未正式发布)谢谢Jaemin-这帮了大忙
var result AllWidgetsView
opts := map[string]interface{}{}
viewErr := bucket.ViewCustom("views", "all_widgets", opts, &result)
if viewErr != nil {
// handle error
}