我如何用Go编程语言在Google App Engine上实现一对多?
例如,如果我有下面的结构,我将如何存储多个投票到一个评论的关联?我是在注释结构中使用投票的键的数组(切片),还是在投票结构中使用一个注释的键?
type Comment struct {
Author string
Content string
Date datastore.Time
}
type Vote struct {
User string
Score int
}发布于 2011-06-01 03:09:01
在当前版本的Go AppEngine SDK中,字段唯一允许的类型是as follows
H110任何底层类型为上述预声明类型之一的类型、H211H112*Key、H116[]字节(长度不超过1 up)、H217
鉴于此,似乎有两种方法可以做到这一点。一种方法是维护一段关键字,以指向给定评论的投票。然而,对于任何合理流行的评论,这很可能会遇到100个元素的限制。
另一种方法是在每个投票结构中存储指向注释的“指针”,如下所示:
type Vote struct {
User string
Score int
CommentKey *datastore.Key
}
type Comment struct {
Author string
Content string
Date datastore.Time
}然后,当你去查询它的时候,你需要分两步去做。首先,您将获得您感兴趣的注释(在本例中,恰好是第一个返回的注释)。第二,查询“指向”该评论的所有投票:
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
}发布于 2013-04-14 00:26:07
如何使用祖先路径将投票存储为评论的子项?我的意思是,在存储每个新的投票结构时,设置指向父注释的父键参数。如下所示:
key, err := datastore.Put(context, datastore.NewIncompleteKey(context, model.DB_KIND_VOTE, commentKey), &vote)发布于 2011-05-25 23:10:25
我还没有尝试过,但也许值得一试:
type Vote struct {
User string
Score int
}
type Comment struct {
Author string
Content string
Date datastore.Time
Votes* []Vote
}https://stackoverflow.com/questions/6125345
复制相似问题