我在数据存储区中有'亲切',如此:
type CompanyDS struct {
Name string
}
如果我使用下面的'order'子句查询它,它将不返回任何行(但不会给出任何错误):
var companiesDS []CompanyDS
datastore.NewQuery("Company").Order("Name").GetAll(c, &companiesDS)
但是,如果我删除'order(“Name”)'部分,它会返回所有行。
答案 0 :(得分:3)
我必须在Google云平台控制台中编辑我的实体,并在“名称”字段中勾选“索引此属性”框。
答案 1 :(得分:2)
由于没有Order()
您可以查询所有实体,这意味着它们确实存在,名称为"Company"
,属性为"Name"
。
自动创建单个属性的索引,因此您无需为它们指定显式索引。
但是如果你不能使用像Order("Name")
这样的单个属性排序来列出它们,那就意味着你的现有实体没有使用Name
属性编制索引。请注意,每个实体的索引可能不同。将实体保存(放入)数据存储区时,您可以指定要索引哪些属性以及哪些属性不是。
您可以在Google Cloud Platform数据存储控制台上进行确认:执行查询
select * from Company
然后点击任何结果(其ID),然后您将看到该实体的详细信息,列出哪个属性已编入索引,哪些属性未编入索引。
您可以在控制台上编辑实体:单击“名称”属性,然后在保存之前,选中“索引此属性”。这将重新保存此实体,使其Name
已编入索引,因此它将显示在下一个查询中(按Name
排序)。
您无需为所有实体手动执行此操作。使用您的Go查询代码(不包含Order()
),查询所有实体,然后重新保存所有实体而不进行修改,因此Name
会因此而被编入索引(因为您的CompanyDS
不会关闭Name
属性的索引。确保您的结构包含所有属性,否则在重新保存时会丢失它们。
注意:您应该确保保存Company
个实体的代码会将Name
索引保存起来。
在Go中,例如值为",noindex"
的{{3}}将禁用单个属性的索引,如下例所示:
type CompanyDS struct {
Name string `datastore:",noindex"`
}