首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Go中如何在App Engine上实现一对多?

在Go中如何在App Engine上实现一对多?
EN

Stack Overflow用户
提问于 2011-05-25 21:38:05
回答 3查看 2.9K关注 0票数 18

我如何用Go编程语言在Google App Engine上实现一对多?

例如,如果我有下面的结构,我将如何存储多个投票到一个评论的关联?我是在注释结构中使用投票的键的数组(切片),还是在投票结构中使用一个注释的键?

代码语言:javascript
运行
复制
type Comment struct {
    Author  string
    Content string
    Date    datastore.Time
}

type Vote struct {
    User string
    Score int
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-01 03:09:01

在当前版本的Go AppEngine SDK中,字段唯一允许的类型是as follows

  • 有符号整数(int、int8、int16、int32和int64)、
  • bool、
  • 字符串、
  • float32和float64、

H110任何底层类型为上述预声明类型之一的类型、H211H112*Key、H116[]字节(长度不超过1 up)、H217

  • 上述任意片段(长度不超过100个元素)。H219F220

鉴于此,似乎有两种方法可以做到这一点。一种方法是维护一段关键字,以指向给定评论的投票。然而,对于任何合理流行的评论,这很可能会遇到100个元素的限制。

另一种方法是在每个投票结构中存储指向注释的“指针”,如下所示:

代码语言:javascript
运行
复制
type Vote struct {
    User string
    Score int
    CommentKey *datastore.Key
}    

type Comment struct {
    Author  string
    Content string
    Date    datastore.Time
}

然后,当你去查询它的时候,你需要分两步去做。首先,您将获得您感兴趣的注释(在本例中,恰好是第一个返回的注释)。第二,查询“指向”该评论的所有投票:

代码语言:javascript
运行
复制
q := datastore.NewQuery("Comment").Limit(1)
comments := make([]Comment, 0, 1)
var err os.Error
var keys []*datastore.Key
if keys, err = q.GetAll(c, &comments); err != nil {
    // handle the error
}

comment := comments[0]
vq := datastore.NewQuery("Vote").Filter("CommentKey=", keys[0])

votes := make([]Vote, 0, 10)
if _, err := vq.GetAll(c, &votes); err != nil {
    // handle the error
}
票数 17
EN

Stack Overflow用户

发布于 2013-04-14 00:26:07

如何使用祖先路径将投票存储为评论的子项?我的意思是,在存储每个新的投票结构时,设置指向父注释的父键参数。如下所示:

代码语言:javascript
运行
复制
key, err := datastore.Put(context, datastore.NewIncompleteKey(context, model.DB_KIND_VOTE, commentKey), &vote)
票数 4
EN

Stack Overflow用户

发布于 2011-05-25 23:10:25

我还没有尝试过,但也许值得一试:

代码语言:javascript
运行
复制
type Vote struct {
    User string
    Score int
}    

type Comment struct {
    Author  string
    Content string
    Date    datastore.Time
    Votes*  []Vote
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6125345

复制
相关文章

相似问题

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