猿问

我可以使用 Go API 一次性获取动物数据库文档的 json 数据吗?

使用 AnimalDB 的 Go API,我可以定义一个结构来发布 founaDB,如下所示:


type LabelData struct {

    RedirectURL   string `fauna:"redirectURL"`

    Owner         string `fauna:"owner"`

    RedirectCount int    `fauna:"redirectCount"`

}

然后我可以使用labelData 一次性为Label Data 结构调用 Create,如下所示:


    labelData := LabelData{

        RedirectURL:   "",

        Owner:         "",

        RedirectCount: 0,

    }

    newlabel, _ := client.Query(

        f.Create(

            f.Collection("label"),

            f.Obj{"data": labelData},

        ),

    )

我的问题是,我能否将上面一次性创建的文档数据转换为 LabelData 类型的有价值的数据?目前,我将其用于 LabelData 类型的每个元素,如下所示:


func faunaLabelInfo(id string) (owner string, redirectCount int, redirectURL string, err error) {

    var data f.Value

    ret, err := client.Query(f.Get(f.RefCollection(f.Collection("label"), documentID)))

    err = ret.At(f.ObjKey("data")).Get(&data)

    err = data.At(f.ObjKey("owner")).Get(&owner)

    err = data.At(f.ObjKey("redirectCount")).Get(&redirectCount)

    err = data.At(f.ObjKey("redirectURL")).Get(&redirectURL)

我的预期如下,但这是错误的。


var labelData LabelData

ret.At(f.ObjKey("LabelData")).Get(&labelData)

谢谢您的建议!


炎炎设计
浏览 95回答 1
1回答

一只萌萌小番薯

我基于 docker ( docker run --rm --name faunadb -p 8443:8443 fauna/faunadb) 制作了完整的工作示例:package mainimport (    "fmt"    f "github.com/fauna/faunadb-go/faunadb")type LabelData struct {    RedirectURL   string `fauna:"redirectURL"`    Owner         string `fauna:"owner"`    RedirectCount int    `fauna:"redirectCount"`}var (    data = f.ObjKey("data")    ref  = f.ObjKey("ref"))func main() {    var labelId f.RefV    config := f.Endpoint("http://localhost:8443")    client := f.NewFaunaClient("secret", config)    labelData := LabelData{        RedirectURL:   "",        Owner:         "",        RedirectCount: 0,    }    // Create a collection to store labels    _, _ = client.Query(f.CreateCollection(f.Obj{"name": "label"}))    newlabel, err := client.Query(        f.Create(            f.Collection("label"),            f.Obj{"data": labelData},        ),    )    if err != nil {        return    }    // Get generated label ID    _ = newlabel.At(ref).Get(&labelId)    fmt.Println(labelId)    // Retrieve label by its ID    value, _ := client.Query(f.Get(labelId))    var newLabelData LabelData    _ = value.At(data).Get(&newLabelData)    fmt.Println(newLabelData.RedirectURL)    fmt.Println(newLabelData.Owner)    fmt.Println(newLabelData.RedirectCount)}
随时随地看视频慕课网APP

相关分类

Go
我要回答