小编典典

如果我有Order子句,则Google App Engine数据存储区不返回任何行

go

我在数据存储区中有一个“种类”,如下所示:

type CompanyDS struct {
    Name string
}

如果我使用下面的“ order”子句查询它,则不返回任何行(但不给出任何错误):

var companiesDS []CompanyDS
datastore.NewQuery("Company").Order("Name").GetAll(c, &companiesDS)

但是,如果删除“ order(“ Name”)”部分,它将返回所有行。


阅读 236

收藏
2020-07-02

共1个答案

小编典典

由于没有Order()查询您就可以查询所有实体,这意味着它们确实具有name "Company"和property的存在"Name"

单个属性的索引会自动创建,因此您无需为其指定显式索引。

但是,如果您无法使用像这样的单个属性排序来列出它们Order("Name"),则意味着您现有的实体不会使用该Name属性编制索引。注意,每个单个实体的索引可能不同。将实体保存(放入)数据存储区后,您可以指定要索引哪些属性,哪些不索引。

您可以在Google Cloud Platform数据存储区控制台上确认这一点:执行查询

select * from Company

然后单击任何结果(其ID),然后您将看到该实体的详细信息,列出了被索引的属性和未被索引的属性。

固定:

您可以在控制台上编辑实体:单击“名称”属性,然后在保存之前检查“为该属性编制索引”。这将重新保存该实体,对其进行Name索引,因此它将显示在下一个查询中(按排序Name)。

您无需为所有实体手动执行此操作。使用您的Go查询代码(不带Order()),查询所有实体,然后重新保存所有实体而不做任何修改,因此,结果Name将被索引(因为您CompanyDS不会关闭该Name属性的索引)。确保您的结构包含所有属性,否则在重新保存时会丢失它们。

注意: 您应确保保存Company实体的代码将其保存为带Name索引的。

例如,在Go中,带有value 的struct标记",noindex"将禁用对单个属性的索引,如本示例所示:

type CompanyDS struct {
    Name string `datastore:",noindex"`
}
2020-07-02