在我的应用程序中,我使用go 1.11作为后端。它在Google数据存储区中执行CRUD操作。我可以从特定种类中检索实体,但是顺序无法确定。我正在使用以下数据存储区模块:
"cloud.google.com/go/datastore"
我的结构是:
type RuleDS struct {
Id string `json:"id" datastore:"id"`
Name string `json:"name" datastore:"name"`
Salience int `json:"salience" datastore:"salience"`
CreatedAt time.Time `json:"createdAt" datastore:"createdAt"`
}
我对实体进行排序的代码如下:
var rulesDSArr []RuleDS
query := datastore.NewQuery("Rule").Order("-Salience")
_, errDS := s.DataLayer.GetAll(ctx, query, &rulesDSArr)
if errDS!= nil{
log.Errorf(ctx,"Error while getting rules : %v",errDS)
}
我还检查了形成查询的日志:
&{kind:Rule ancestor:<nil> filter:[] order:[{FieldName:Salience Direction:true}] projection:[] distinct:false distinctOn:[] keysOnly:false eventual:false limit:-1 offset:0 start:[] end:[] namespace: trans:<nil> err:<nil>}
在Google数据存储区中,我尝试通过将Salience属性编入索引以及将未编入索引的属性进行尝试,但对我没有任何帮助。我不知道自己在做什么错,因此我得到的结果是null。如果我从查询语句中删除
.Order("-Salience")
,我将再次获得所有规则。 最佳答案
听起来您没有为Salience索引任何值。 .Order("-Salience")
在Salience值上使用索引,因此任何没有Salience索引值的实体都不会显示在结果中。就是说,Cloud Datastore中的值似乎是salience
,因此您应该尝试.Order("-salience")
。
您可以在云控制台中尝试的操作:
select * from Rule order by salience desc
select * from Rule order by Salience desc
如果两者均未给出结果,则您没有索引的Salience值,您将不得不重写您的实体。
关于google-app-engine - 无法在Golang中对数据存储类型的实体进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57176397/