Google应用引擎:ndb排序属性

时间:2013-03-11 10:30:07

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

我有以下型号:

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)

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

1 个答案:

答案 0 :(得分:5)

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

  

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

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

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