当使用 IncompleteKey 创建实体以便每条记录本质上都是唯一的时,将键添加回记录以便它可以在结构中传递的最佳方法是什么 - 在创建时?例如,使用事务这样的(未经测试的代码)是个好主意吗? err = datastore.RunInTransaction(c, func(c appengine.Context) error { incompleteKey := datastore.NewIncompleteKey(c, ENTITY_TYPE, nil) entityKey, err := datastore.Put(c, incompleteKey, &MyStruct) if(err != nil) { return err } MyStruct.SelfID = entityKey.IntID() _, err = datastore.Put(c, entityKey, &MyStruct) return err }, nil)作为后续 - 我猜这应该几乎永远不会失败,因为它几乎永远不会在同一个不完整键上运行?
1 回答
函数式编程
TA贡献1807条经验 获得超9个赞
您不需要将 MyStruct 两次放入 DB - 这是不必要的开销。作为实体的一部分存储的密钥,可以在需要时检索。
关于如何存储实体并将其 ID 用作参考的文档中有一个很好的示例:https : //cloud.google.com/appengine/docs/go/datastore/entities#Go_Ancestor_paths
当您想获取实体的键时,您可以使用以下方法执行此操作:https : //cloud.google.com/appengine/docs/go/datastore/queries#Go_Retrieving_results - (已编辑)注意示例中的键和结构是在 1 次操作中填充。
如果您通过键查询实体,您已经知道它的 ID。
因此不需要将 ID 作为单独的属性。如果您想将它与业务逻辑的实体一起传递,您可以创建一个包装器 - 使用 interface() 对实体结构进行概括或使用强类型(每个实体结构 1 个)。
- 1 回答
- 0 关注
- 199 浏览
添加回答
举报
0/150
提交
取消