Google App Engine 数据存储 returns 如果我有 Order 子句则没有行
Google App Engine Datastore returns no rows if i have an Order clause
我在数据存储中有一个 'kind',如下所示:
type CompanyDS struct {
Name string
}
如果我用下面的 'order' 子句查询它,它 returns 没有行(但没有给出任何错误):
var companiesDS []CompanyDS
datastore.NewQuery("Company").Order("Name").GetAll(c, &companiesDS)
但是,如果我删除 'order("Name")' 部分,它 returns 所有行都很好。
我必须在 google 云平台控制台中编辑我的实体,并勾选名称字段中的方框 'Index this property'。
因为没有 Order()
你可以查询所有实体,这意味着它们确实存在名称 "Company"
和 属性 "Name"
.
单个属性的索引是自动创建的,因此您不需要为它们指定显式索引。
但是,如果您无法使用 Order("Name")
之类的单个 属性 顺序列出它们,则意味着您现有的实体未使用 Name
属性 编制索引.请注意,每个实体的索引可能不同。当您将一个实体保存(放入)到数据存储中时,您可以指定哪些属性要编制索引,哪些不编制索引。
您可以在 Google Cloud Platform Datastore 控制台上确认:执行查询
select * from Company
然后单击任何结果(其 ID),然后您将看到该实体的详细信息,列出哪些 属性 已编入索引,哪些未编入索引。
修复:
您可以在控制台上编辑实体:单击 "Name" 属性,然后在保存之前选中 "Index this property"。这将重新保存该实体,使其 Name
编入索引,因此它将显示在下一个查询中(按 Name
排序)。
您不需要为所有实体手动执行此操作。使用您的 Go 查询代码(没有 Order()
),查询所有实体,然后不加修改地重新保存所有实体,因此 Name
将因此得到索引(因为您的 CompanyDS
不会关闭 Name
属性 的索引)。确保你的结构包含所有属性,否则你会在重新保存时丢失它们。
注意:您应该确保保存 Company
个实体的代码使用 Name
索引保存它们。
例如,在 Go 中,值为 ",noindex"
的 struct tag 将禁用单个 属性 的索引,如本例所示:
type CompanyDS struct {
Name string `datastore:",noindex"`
}
我在数据存储中有一个 'kind',如下所示:
type CompanyDS struct {
Name string
}
如果我用下面的 'order' 子句查询它,它 returns 没有行(但没有给出任何错误):
var companiesDS []CompanyDS
datastore.NewQuery("Company").Order("Name").GetAll(c, &companiesDS)
但是,如果我删除 'order("Name")' 部分,它 returns 所有行都很好。
我必须在 google 云平台控制台中编辑我的实体,并勾选名称字段中的方框 'Index this property'。
因为没有 Order()
你可以查询所有实体,这意味着它们确实存在名称 "Company"
和 属性 "Name"
.
单个属性的索引是自动创建的,因此您不需要为它们指定显式索引。
但是,如果您无法使用 Order("Name")
之类的单个 属性 顺序列出它们,则意味着您现有的实体未使用 Name
属性 编制索引.请注意,每个实体的索引可能不同。当您将一个实体保存(放入)到数据存储中时,您可以指定哪些属性要编制索引,哪些不编制索引。
您可以在 Google Cloud Platform Datastore 控制台上确认:执行查询
select * from Company
然后单击任何结果(其 ID),然后您将看到该实体的详细信息,列出哪些 属性 已编入索引,哪些未编入索引。
修复:
您可以在控制台上编辑实体:单击 "Name" 属性,然后在保存之前选中 "Index this property"。这将重新保存该实体,使其 Name
编入索引,因此它将显示在下一个查询中(按 Name
排序)。
您不需要为所有实体手动执行此操作。使用您的 Go 查询代码(没有 Order()
),查询所有实体,然后不加修改地重新保存所有实体,因此 Name
将因此得到索引(因为您的 CompanyDS
不会关闭 Name
属性 的索引)。确保你的结构包含所有属性,否则你会在重新保存时丢失它们。
注意:您应该确保保存 Company
个实体的代码使用 Name
索引保存它们。
例如,在 Go 中,值为 ",noindex"
的 struct tag 将禁用单个 属性 的索引,如本例所示:
type CompanyDS struct {
Name string `datastore:",noindex"`
}