【问题标题】:Google app engine: ndb sort property谷歌应用引擎:ndb 排序属性
【发布时间】:2013-02-26 11:54:05
【问题描述】:

我有以下型号:

class Product(ndb.Model):
    name = ndb.StringProperty()
    bidTime = ndb.DateTimeProperty()
    price = ndb.IntegerProperty()
    ...

我希望使用以下查询:

productRanks = Product.query(Product.bidTime>=startDate,
                             Product.bidTime<endDate).order(-Product.price).fetch()         

其中startDateendDate 是日期时间对象。但我收到以下错误消息:

第一个排序属性必须与应用不等式过滤器的属性相同

如果我在订单中添加Product.bidTime则不会出错:

.order(Product.bidTime, -Product.price)

但是,排序结果将是错误的(根据日期,而不是价格)。那么,问题是什么?

【问题讨论】:

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


    【解决方案1】:

    就 appengine 而言没有问题。它的行为与记录的一样。来自文档

    注意:由于 App Engine 数据存储区执行查询的方式,如果 查询指定属性上的不等式过滤器和排序顺序 其他属性,不等式过滤器中使用的属性必须是 在其他属性之前排序。

    https://developers.google.com/appengine/docs/python/datastore/queries#Sort_Orders

    获得结果集后,您可能需要在内存中进行排序。

    【讨论】:

    • 谢谢。所以我必须自己实现一个排序算法(例如,冒泡排序;-)。太糟糕了。
    • 嗯,不,您不必实现自己的排序算法,但如果您不想阅读文档;-)。假设您的结果集不是很大,只需使用 python 的内置排序功能。请记住,如果您对结果集执行 fetch(),您会得到一个列表。即使它是一个巨大的集合使用你已经可用的设施。这是在 python 中排序的一个很好的起点。 wiki.python.org/moin/HowTo/Sorting
    • 谢谢,我试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多