Google app engine 在Go-on应用程序引擎中建模N对N关联
我正在尝试使用Google应用程序引擎在Go中编写一个Web应用程序,我有一个关于使用数据存储建模关系的问题 我知道在Python中,我可以使用db.referenceProperty()对关系进行建模。我似乎不知道如何使用Go API建立类似的关联Google app engine 在Go-on应用程序引擎中建模N对N关联,google-app-engine,go,Google App Engine,Go,我正在尝试使用Google应用程序引擎在Go中编写一个Web应用程序,我有一个关于使用数据存储建模关系的问题 我知道在Python中,我可以使用db.referenceProperty()对关系进行建模。我似乎不知道如何使用Go API建立类似的关联 是否有人有幸做到这一点?您可以将密钥用作实体中的属性: 类似这样的事情(我不知道去吧,请容忍我): 可以将键用作实体中的属性: 类似这样的事情(我不知道去吧,请容忍我): 彼得,你肯定走对了路。我想我已经弄明白了。我还没有真正测试过这一点,但它在数
是否有人有幸做到这一点?您可以将密钥用作实体中的属性: 类似这样的事情(我不知道去吧,请容忍我):
可以将键用作实体中的属性: 类似这样的事情(我不知道去吧,请容忍我):
彼得,你肯定走对了路。我想我已经弄明白了。我还没有真正测试过这一点,但它在数据存储查看器中似乎是正确的。我现在看到的是这样的(忽略示例中的错误检查):
类型Boss结构{
名称,Uuid字符串
}
类型Employee结构{
名称,Uuid字符串,
Boss*datastore.Key
}
boss:=&boss{
姓名:“尖头老板”,
Uuid:,
}
迪尔伯特:=&Employee{
姓名:“迪尔伯特”,
Uuid:,
老板:没有,
}
datastore.Put(上下文,datastore.NewIncompleteKey(上下文,“Boss”,nil),bossman)
query:=datastore.NewQuery(“Boss”).Filter(“Uuid=”,bossMan)
对于t:=query.Run(ctx);{
var雇员
key,err:=t.Next(&employee)
如果err==datastore.Done{
打破
}
如果错误!=零{
fmt.Fprintf(w,“错误%s”,错误)
}
dilbert.Boss=key
}
datastore.Put(上下文,datastore.NewIncompleteKey(上下文,“Employee”,nil),dilbert)
彼得,你肯定走对了方向。我想我已经弄明白了。我还没有真正测试过这一点,但它在数据存储查看器中似乎是正确的。我现在看到的是这样的(忽略示例中的错误检查):
类型Boss结构{
名称,Uuid字符串
}
类型Employee结构{
名称,Uuid字符串,
Boss*datastore.Key
}
boss:=&boss{
姓名:“尖头老板”,
Uuid:,
}
迪尔伯特:=&Employee{
姓名:“迪尔伯特”,
Uuid:,
老板:没有,
}
datastore.Put(上下文,datastore.NewIncompleteKey(上下文,“Boss”,nil),bossman)
query:=datastore.NewQuery(“Boss”).Filter(“Uuid=”,bossMan)
对于t:=query.Run(ctx);{
var雇员
key,err:=t.Next(&employee)
如果err==datastore.Done{
打破
}
如果错误!=零{
fmt.Fprintf(w,“错误%s”,错误)
}
dilbert.Boss=key
}
datastore.Put(上下文,datastore.NewIncompleteKey(上下文,“Employee”,nil),dilbert)
type Employee struct {
Name string
Boss *Key
}
employee := Employee{
Name: "John Doe",
Boss: key // a key to some other entity
}
type Boss struct {
Name, Uuid string
}
type Employee struct {
Name, Uuid string,
Boss *datastore.Key
}
boss := &Boss {
Name: "Pointy Haired Boss",
Uuid: <<some uuid>>,
}
dilbert := &Employee {
Name: "Dilbert",
Uuid: <<some uuid>>,
boss: nil,
}
datastore.Put(context, datastore.NewIncompleteKey(context, "Boss", nil), bossman)
query := datastore.NewQuery("Boss").Filter("Uuid =", bossMan)
for t := query.Run(ctx); ; {
var employee Employee
key, err := t.Next(&employee)
if err == datastore.Done {
break
}
if err != nil {
fmt.Fprintf(w, "Error %s", err)
}
dilbert.Boss = key
}
datastore.Put(context, datastore.NewIncompleteKey(context, "Employee", nil), dilbert)