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



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

type LabelData struct {
RedirectURL   string `fauna:"redirectURL"`
Owner         string `fauna:"owner"`
RedirectCount int    `fauna:"redirectCount"`
}

然后,我可以使用标签数据一次性调用标签数据结构的创建,如下所示:

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)

感谢您的建议!

我基于 docker 制作了完整的工作示例 (docker run --rm --name faunadb -p 8443:8443 fauna/faunadb(:

package main
import (
"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)
}

最新更新