无法执行不同的投影查询

时间:2017-07-01 06:33:04

标签: google-app-engine google-cloud-datastore app-engine-ndb

我有一个简单的小观察"观察"类:

from google.appengine.ext import ndb

class Observation(ndb.Model):
    remote_id = ndb.StringProperty()
    dimension_id = ndb.IntegerProperty()
    metric = ndb.StringProperty()
    timestamp_observed = ndb.StringProperty()
    timestamp_received = ndb.DateTimeProperty(auto_now_add=True)

    @classmethod
    def query_book(cls):
        return cls.query()

我可以对数据存储区运行投影查询,只返回某些列。 E.g:

observations = Observation.query().fetch(projection=[Observation.dimension_id])

这很好用,但我只想要独特的结果。 documentation让这听起来很简单:

# Functionally equivalent
Article.query(projection=[Article.author], group_by=[Article.author])
Article.query(projection=[Article.author], distinct=True)

但是当我这样做时:

observations = Observation.query().fetch(projection=[Observation.dimension_id], group_by=[Observation.dimension_id])
observations = Observation.query().fetch(projection=[Observation.dimension_id], distinct=True)

我的两个变种都有错误。

TypeError: Unknown configuration option ('group_by')
TypeError: Unknown configuration option ('distinct')

这也发生在localhost和prod环境中。我错过了什么?

1 个答案:

答案 0 :(得分:4)

愚蠢的我 - 所有这些参数都需要在query()函数中,而不是在fetch()中。投影元素实际上在fetch()中工作,但是您需要将投影和不同的参数移动到query()中以使其工作。

来自Grouping

  

投影查询可以使用distinct关键字来确保这一点   将在结果集中返回完全唯一的结果。这将   仅返回具有相同值的实体的第一个结果   对于正在投影的属性。

Article.query(projection=[Article.author], group_by=[Article.author])
Article.query(projection=[Article.author], distinct=True)
     

两个查询都是等效的,只会生成每个作者的姓名   一次。

希望这可以帮助其他有类似问题的人:)