Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
View 如何访问couchbase视图中的值?_View_Go_Couchbase - Fatal编程技术网

View 如何访问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":

我有一个widget.json文件,它被加载到couchbase中的文档中:

{
  "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)
在这一点上,我还有几个问题:

  • 确定如何处理“data”变量的最佳方法是什么?我怀疑这是一个整数索引行列表,每个行都包含一个键/值映射,其中的值可以是不同类型的。我看到了很多map[string]接口{}的简单示例,但这似乎有一个额外的间接层次。在C语言中很容易理解,IMHO,但是接口{}{}让我感到困惑
  • 可能是上述答案的扩展,但如何使用设计文档进行有效搜索?我宁愿让Couchbase服务器进行筛选
  • 一些Get()示例传入结构类型,即

    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)
    
  • 是否可以使用视图()执行类似操作

  • 有人知道灵活地将视图机制挂接到net/httprest处理程序的好方法吗?只是希望
  • 我没有发现golang客户端API示例或文档中包含这些问题。我可能错过了什么。如果有人有链接,请让我知道

    谢谢你的帮助

    自定义Go中的查看结果 如果您使用的是
    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
    }