【问题标题】:Can't execute a distinct projection query无法执行不同的投影查询
【发布时间】:2018-07-25 07:43:43
【问题描述】:

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

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()

我可以对数据存储运行投影查询以仅返回某些列。例如:

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 环境中。我错过了什么?

【问题讨论】:

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


    【解决方案1】:

    我真傻——所有这些参数都需要放在 query() 函数中,而不是 fetch() 中。投影元素实际上在 fetch() 中工作,但您需要将投影和不同的参数都移到 query() 中才能使其工作。

    来自Grouping

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      相关资源
      最近更新 更多