【问题标题】:Not able to sort entities of datastore kind in golang无法在golang中对数据存储类型的实体进行排序
【发布时间】:2019-12-02 05:20:33
【问题描述】:

在我的应用程序中,我使用 go 1.11 作为后端。它在谷歌数据存储中执行 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"),我会再次获得所有规则。

【问题讨论】:

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


    【解决方案1】:

    听起来您没有任何显着性索引值。 .Order("-Salience") 在显着性值上使用索引,因此任何没有显着性索引值的实体都不会显示在结果中。也就是说,Cloud Datastore 中的值似乎是salience,所以你应该试试.Order("-salience")。

    您可以在云控制台中尝试的事情:

    • select * from Rule order by salience desc
    • select * from Rule order by Salience desc

    如果两者都没有给出结果,那么您没有任何显着性值被索引,您将不得不重写您的实体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 2020-12-13
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多