无法在Golang中对数据存储类型的实体进行排序

时间:2019-07-24 06:17:48

标签: google-app-engine go google-cloud-platform google-cloud-datastore

在我的应用程序中,我使用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"),则会再次获得所有规则。

1 个答案:

答案 0 :(得分:0)

听起来您没有为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的任何值,并且必须重写您的实体。