gpt4 book ai didi

google-app-engine - 无法在 golang 中对数据存储类型的实体进行排序

转载 作者:数据小太阳 更新时间:2023-10-29 03:18:45 25 4
gpt4 key购买 nike

在我的应用程序中,我使用 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 datastore 中,我曾尝试将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com