首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gocb:批量获取操作示例

gocb:批量获取操作示例
EN

Stack Overflow用户
提问于 2015-10-11 18:18:18
回答 2查看 1.3K关注 0票数 3

最近发布的gocb (couchbase的官方golang客户端)提供了用于执行批量操作(Get、Delete等)的API。我希望看到这样的一个完整的例子,唉-我的围棋技能是缺乏的,没有任何在线。

我希望看到一个片段,它(1)编译和(2)执行多个get,最后(3)设法访问couchbase返回的值。

下面是网上存在的少量文档:http://developer.couchbase.com/documentation/server/4.0/sdks/go-beta/bulk-operations.html

下面的代码(执行插入)是不够的:我想要Get (特别是--如何检查get操作结果的内容)。

代码语言:javascript
复制
myBucket, _ := myCluster.OpenBucket("default", "")

var items []gocb.BulkOp
items = append(items, &gocb.InsertOp{Key: "document_name_1", Value: "Hello World 1"})
items = append(items, &gocb.InsertOp{Key: "document_name_2", Value: "Hello World 2"})

err := bucket.Do(items)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-12 15:39:47

只需将*InsertOp值替换为*GetOp值,然后读取它们的Value字段:

代码语言:javascript
复制
package main

import "fmt"
import "gopkg.in/couchbaselabs/gocb.v1"

func main() {
        getKeys()
}

func getKeys() {
        myCluster, err := gocb.Connect("couchbase://<couchbase-address>")
        if err != nil {
                fmt.Println("cluster error:", err)
        }
        myBucket, err := myCluster.OpenBucket("Test", "") //case sensitive!
        if err != nil {
                fmt.Println("bucket error:", err)
        }

        var items []gocb.BulkOp
        items = append(items, &gocb.GetOp{Key: "document_name_1"})
        items = append(items, &gocb.GetOp{Key: "document_name_2"})

        err = myBucket.Do(items)

        if err != nil {
                fmt.Println("Do error:", err)
                panic(err)
        }

        for _, g := range items {
                //"downcast" the instance back to its concrete type - GetOp
                t := g.(*gocb.GetOp)
                fmt.Println(t)
        }
}
票数 1
EN

Stack Overflow用户

发布于 2017-02-19 12:06:14

这是一个可行的版本,但我认为它相当冗长

代码语言:javascript
复制
package main

import (
    "fmt"

    "gopkg.in/couchbase/gocb.v1"
)

const (
    COUCH_OP_COUNT = 3
)

// data interchange with Couchbase store
type StorageUrl struct {
    Url string
}

func storeThings(b *gocb.Bucket) {
    var ops []gocb.BulkOp
    for i := 0; i < COUCH_OP_COUNT; i++ {
        k := fmt.Sprintf("key_%v", i)
        ops = append(ops, &gocb.UpsertOp{
            Key:   k,
            Value: StorageUrl{Url: fmt.Sprintf("http://www.i-%v.com", i)},
        })
    }

    b.Do(ops)
}

func fetchThings(b *gocb.Bucket) {
    var err error
    var ops []gocb.BulkOp
    var results []interface{}
    for i := 0; i < COUCH_OP_COUNT; i++ {
        k := fmt.Sprintf("key_%v", i)
        results = append(results, &StorageUrl{})
        ops = append(ops, &gocb.GetOp{
            Key:   k,
            Value: results[i],
        })
    }

    err = b.Do(ops)
    if err != nil {
        fmt.Println(err)
        return
    }

    for _, op := range ops {
        getOp := op.(*gocb.GetOp)
        v := getOp.Value.(*StorageUrl)
        fmt.Println(v)
    }
}

func main() {
    cluster, err := gocb.Connect("couchbase://127.0.0.1")
    if err != nil {
        fmt.Println(err)
        return
    }

    bucket, err := cluster.OpenBucket("test", "")
    if err != nil {
        fmt.Println(err)
        return
    }

    storeThings(bucket)
    fetchThings(bucket)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33068478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档