如何在沙发床视图中访问值?

詹姆斯·弗里曼

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

{
  "type": "widget",
  "name": "clicker",
  "description": "clicks!"
}

我也有一个用于存储桶的沙发床设计文档,couchbase.ddoc。它以名称“ views”注册:

{
  "_id": "_design/accesscheck",
  "language": "javascript",
  "views": {
    "all_widgets": {
      "map": "function(doc, meta) { if(doc.type == 'widget') { emit(meta.id, doc.name); } }"
    }
  }
}

以及一些使用ouchbase golang API的golang代码来获取它:

opts := map[string]interface{}{
  "stale": false
}

data, _ := bucket.View("views", "all_widgets", opts)

在这一点上,我还有几个问题:

  1. 确定我可以对“数据”变量进行处理的最佳方法是什么?我怀疑这是一个由整数索引的行的列表,每个行都包含一个键/值映射,其中值可以是不同的类型。我看到了很多有关map [string] interface {}的琐碎示例,但是这似乎还有一个间接的层次。在C语言中很容易理解,恕我直言,但是界面{} {}让我感到困惑。
  2. 可能是上述答案的扩展,但是如何使用设计文档进行有效搜索?我宁愿让Couchbase服务器进行筛选。
  3. 一些Get()示例传递的是struct类型,即

    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)
    

是否可以使用View()做类似的事情?

  1. 有人知道将View机制灵活地挂接到net / http REST处理程序中的好方法吗?只是希望..

我没有在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

就您而言,您可以像这样为“ all_widgets”编写自定义视图结构;

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本身有关。

视图具有存储桶没有的某些功能。查看结果按键排序,因此您可以指定startkey开始结果的选项。您可以使用此属性并使视图成为搜索对象。有关更多信息,请参见查询视图

但是您需要更详细的搜索(例如全文搜索),您应该使用ElasticSearch插件N1QL执行此操作。(请注意N1QL是预览,尚未正式发布)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当密钥不满足沙发床视图中的确切值时,响应自定义错误

来自分类Dev

从沙发床视图获取柜台文件

来自分类Dev

包装沙发床访问功能

来自分类Dev

沙发床的油门XDCR

来自分类Dev

沙发床的油门XDCR

来自分类Dev

Sync_gateway沙发床requireRole

来自分类Dev

沙发床无法存储,因为太大

来自分类Dev

Sync_gateway沙发床requireRole

来自分类Dev

通过python批量插入沙发床

来自分类Dev

使用带有boolean参数的沙发床视图时出现问题

来自分类Dev

如何通过给定的密钥来检索沙发床中的所有文档?

来自分类Dev

如何使用批量获取从沙发床获取有序结果

来自分类Dev

在沙发床中检测到锁释放?

来自分类Dev

建议在多租户应用中使用沙发床模型

来自分类Dev

匹配沙发床设计中的任何键

来自分类Dev

为Hyperledger Fabric沙发床启用SSL

来自分类Dev

是否可以从沙发床参考javascript库?

来自分类Dev

在沙发床中检测到锁释放?

来自分类Dev

为什么不能登录到沙发床?

来自分类Dev

如何在模式视图中访问对象

来自分类Dev

如何在视图中访问 ViewModel 的属性

来自分类Dev

使用正则表达式形式的密钥删除沙发床存储桶中的条目

来自分类Dev

有关沙发床复制品细节的一些问题

来自分类Dev

我怎样才能分组并更改沙发床中值的内容?

来自分类Dev

有关沙发床复制品细节的一些问题

来自分类Dev

网上有免费的免费沙发床商店可供学习吗?

来自分类Dev

要在N1QL沙发床情况下使用内部元素总和

来自分类Dev

使用适用于Python SDK的Twisted API异步N1QL沙发床查询

来自分类Dev

如何在Django视图中访问ModelForm的字段