6

我试图弄清楚如何使用 Go 让嵌套结构与 GAE 数据存储一起使用。我知道数据存储并不专门支持嵌套结构。当帖子以 JSON 形式发送给用户时,我需要找到一种简单的方法来获取用户信息。

我想到的一件事是为用户放置两个字段。一个用于引用用户的 ID/键,另一个用于用户类型结构,当从数据存储区加载帖子时将添加到那里。额外的字段看起来很傻,所以我希望有一个更好的解决方案。

有两种实体类型或结构:POST 和 USER

帖子需要包含有关发布帖子的用户的信息。

我将为用户输出的 JSON 的结构如下:

  • 邮政
    • 字段1
    • 字段2
    • 用户
      • 用户字段1
      • 用户字段2
4

2 回答 2

9

Go 的 appengine 数据存储 api 为这类事情提供了 PropertyLoadSaver 接口:https ://developers.google.com/appengine/docs/go/datastore/reference#PropertyLoadSaver

您可以根据需要构建结构,然后实现该接口的 Load 和 Save 方法以正确填充它。这意味着您自己编写序列化代码,但它使您可以完全自由地构建数据。

这将允许您仍然过滤字段并具有嵌套结构。

于 2013-01-14T04:06:08.193 回答
0

python 运行时有 ndb 库,它支持这样的嵌套结构。Go 没有,所以我可以想到两种解决方案:

  1. 在 POST 类型中,有一个作为键的用户字段,引用具有必要字段的 USER 类型。需要两次提取和往返。
  2. 在 POST 类型中创建一个作为 blob 的用户字段。blob 是一个在 go 中 [de] 序列化的字符串。这意味着您无法搜索或过滤任何用户数据,但它还允许您将所有内容存储在一个实体中。

您应该根据应用程序的需要使用这些。如果您需要用户是真实的东西,请使用 1。如果用户不是您需要使用的对象(即,只是要显示的数据),您可以使用 2。

于 2013-01-13T22:46:12.467 回答