Google App Engine NDB 排序丢失实体
Google App Engine NDB Sorting Loses Entities
我正在尝试根据分数对从数据集中提取的一些实体进行排序,但目前它 returns 只有 1 个实体,而不是数据存储中当前的 4 个实体。
模型定义如下:
class Place(ndb.Model):
"""Model for places."""
title = ndb.StringProperty()
url = ndb.StringProperty()
longitude = ndb.StringProperty()
latitude = ndb.StringProperty()
score = ndb.IntegerProperty()
votes = ndb.KeyProperty(repeated = True, kind = 'Vote')
reviews = ndb.KeyProperty(repeated = True, kind = 'Review')
我试图获取得分最高的 10 个地方的查询是:
places = Place.query().order(Place.score).fetch(10)
我目前拥有的数据集:
这导致仅返回地点 A
而不是其他实体。
如何从最高到最低对实体进行排序score
?
PS:我用 Google 搜索了所有,但找不到任何可行的解决方案。
你做的很好,所以问题出在数据本身。
从数据存储控制台的外观来看,我可以看出写入是以不同的方式完成的,您获得的实体与其他实体之间的数据形状非常不同,还有 Write Ops 专栏,告诉我们很多。
只有 2 次写入的实体没有任何 属性 索引,除了 ID
本身,它按升序和降序写入,导致上述 2 次写入操作。
你得到的实体有 4 次写入,显然还有其他索引正在写入,它必须是 score
,否则你不会得到任何数据。查询仅适用于索引属性,如果过滤器 属性 在执行时未被索引,则实体可以存在但 "invisible"。
如果您的代码中的模型与此问题中的模型看起来相同,那么再次put()
实体应该至少写入 12 个索引。
无法告诉您是什么原因造成的,也许属性最初是 indexed=False
?
我正在尝试根据分数对从数据集中提取的一些实体进行排序,但目前它 returns 只有 1 个实体,而不是数据存储中当前的 4 个实体。
模型定义如下:
class Place(ndb.Model):
"""Model for places."""
title = ndb.StringProperty()
url = ndb.StringProperty()
longitude = ndb.StringProperty()
latitude = ndb.StringProperty()
score = ndb.IntegerProperty()
votes = ndb.KeyProperty(repeated = True, kind = 'Vote')
reviews = ndb.KeyProperty(repeated = True, kind = 'Review')
我试图获取得分最高的 10 个地方的查询是:
places = Place.query().order(Place.score).fetch(10)
我目前拥有的数据集:
这导致仅返回地点 A
而不是其他实体。
如何从最高到最低对实体进行排序score
?
PS:我用 Google 搜索了所有,但找不到任何可行的解决方案。
你做的很好,所以问题出在数据本身。
从数据存储控制台的外观来看,我可以看出写入是以不同的方式完成的,您获得的实体与其他实体之间的数据形状非常不同,还有 Write Ops 专栏,告诉我们很多。
只有 2 次写入的实体没有任何 属性 索引,除了 ID
本身,它按升序和降序写入,导致上述 2 次写入操作。
你得到的实体有 4 次写入,显然还有其他索引正在写入,它必须是 score
,否则你不会得到任何数据。查询仅适用于索引属性,如果过滤器 属性 在执行时未被索引,则实体可以存在但 "invisible"。
如果您的代码中的模型与此问题中的模型看起来相同,那么再次put()
实体应该至少写入 12 个索引。
无法告诉您是什么原因造成的,也许属性最初是 indexed=False
?