当前位置: 首页 > 面试题库 >

App Engine数据存储区:如何使用golang在属性上设置多个值?

秦琦
2023-03-14
问题内容

我正在尝试使用Golang在Google的数据存储中为单个属性保存多个值。

我有一个int64,我希望能够存储和检索。从文档中,我可以看到通过实现PropertyLoadSaver
{}接口对此提供了支持。但我似乎无法提出正确的实施方案。

本质上,这就是我要完成的工作:

type Post struct {
    Title         string
    UpVotes       []int64 `json:"-" xml:"-" datastore:",multiple"`
    DownVotes     []int64 `json:"-" xml:"-" datastore:",multiple"`
}

c := appengine.NewContext(r)
p := &Post{
    Title: "name"
    UpVotes: []int64{23, 45, 67, 89, 10}
    DownVotes: []int64{90, 87, 65, 43, 21, 123}
}
k := datastore.NewIncompleteKey(c, "Post", nil)
err := datastore.Put(c, k, p)

但是没有“数据存储:无效的实体类型”错误。


问题答案:

默认情况下,AppEngine支持多值属性,您无需执行任何特殊操作即可使其工作。您不需要实现PropertyLoadSaver接口,也不需要任何特殊的标记值。

如果struct字段是切片类型,则它将自动为多值属性。此代码有效:

type Post struct {
    Title         string
    UpVotes       []int64
    DownVotes     []int64
}

c := appengine.NewContext(r)
p := &Post{
    Title: "name",
    UpVotes: []int64{23, 45, 67, 89, 10},
    DownVotes: []int64{90, 87, 65, 43, 21, 123},
}
k := datastore.NewIncompleteKey(c, "Post", nil)
key, err := datastore.Put(c, k, p)
c.Infof("Result: key: %v, err: %v", key, err)

当然,如果您愿意,可以为json和xml指定标签值:

type Post struct {
    Title         string
    UpVotes       []int64 `json:"-" xml:"-"`
    DownVotes     []int64 `json:"-" xml:"-"`
}

笔记:

但是请注意,如果索引了多值属性,则该属性不适合存储大量值。这样做将需要许多索引(许多写入操作)才能存储和修改实体,并且可能会达到实体的索引限制(有关更多详细信息,请参见索引限制和爆炸索引)。

因此,例如,您不能使用多值属性存储的上,下投票数Post。对于您应该存储票作为单独/不同实体链接到Post由如KeyPost或最好只是它IntID



 类似资料:
  • 问题内容: 目前我正在使用这样的东西: 但是事实证明,AppEngine上的数据存储区中的ID不是从1开始的。我在数据存储区中有两个图像,其ID为6001和7001。 有没有更好的方法来检索随机图像? 问题答案: 数据存储是分布式的,因此ID是非顺序的:两个数据存储节点需要能够同时生成ID而不会引起冲突。 要获得随机实体,可以在创建时将0到1之间的随机浮点数附加到每个实体。然后进行查询,执行以下操

  • 问题内容: 我正在尝试决定是否应针对App引擎关联的Android项目使用App引擎搜索API或数据存储区。Google文档的唯一区别是 …索引搜索最多只能找到10,000个匹配的文档。App Engine数据存储区可能更适合需要检索非常大的结果集的应用程序。 鉴于我已经非常熟悉数据存储区:假设我不需要10,000个结果,有人可以帮我吗? 是否有任何优势,利用与使用数据存储为我的查询(根据上面的报

  • 出于监管和安全的原因,我不得不将Spring boot应用程序的逻辑拆分为两个工具:一个用于管理有限数量的表,另一个用于“真正的”用户应用程序。因此,我在服务器版本5.7上有两个MySQL数据库实例。虽然用户工具只访问一个包含几十个表的数据库,但管理工具需要访问两个数据库中的实体。 这些工具都是基于JavaFX和Spring Boot的。由于这种体系结构设置,我有三个maven包:一个用于管理工具

  • 问题内容: 我正在尝试使用他们的电子邮件地址在appengine数据存储区中查找用户。我正在使用Go。 此代码找不到任何用户。 如果我更改查询以使用“ Id”属性查找用户,则可以正常工作。 我已经确认“ AccountEmail”的属性名称和值正确。“ AccountEmail”它也被索引。 为了使查询正常工作,是否需要使用电子邮件地址进行某些特殊格式设置? 问题答案: 为了通过电子邮件()查找用

  • 问题内容: 要放置在数据存储区中的对象将具有一组标签。 在Python中,Google App Engine具有列表属性的概念。Java(如果存在)中的等效概念是什么?如何在Java,JPA和/或JDO中使用列表属性? 问题答案: 确切地看到我的博客文章:具有关系索引实体的有效关键字搜索和Google数据存储区的Objectify。它讨论了使用关系索引实体和Objectify通过列表属性实现搜索。

  • 问题内容: 我想呈现输入的HTML5属性,以便可以将jquery图像选择器与react一起使用。我的代码是: 问题是即使正确地以a形式传递,它也不会在HTML中呈现- 只是呈现为。如何使变量正确传递到HTML? 问题答案: 您不应将JavaScript表达式用引号引起来。 查看JavaScript Expressions文档以获取更多信息。