2

私は次のものを持っています:

class Notification(ndb.Model):
    targetUser = ndb.KeyProperty()
    pointRoot = ndb.KeyProperty()
    followReason = ndb.StringProperty()
    notificationReason = ndb.StringProperty()
    sourceUser = ndb.KeyProperty() # User who caused notification to be raised
    raisedDate = ndb.DateTimeProperty(auto_now_add=True)
    cleared = ndb.BooleanProperty(default=False)
    clearedDate = ndb.DateTimeProperty(default=None)

@classmethod
def getActiveNotificationsForUser(cls, userKey):
    q = cls.query(ndb.AND(cls.targetUser == userKey, cls.cleared == False))
    q.order(-cls.raisedDate)     
    notifications = q.fetch(10)            
    return notifications

これは不等式フィルターを使用せず、等式フィルターのみを使用するため、これは機能するはずだと思いました。うまくいかないときは、次のように index.yaml で定義されたインデックスを追加しました。

- kind: Notification
  properties:
  - name: targetUser
  - name: cleared
  - name: raisedDate
    direction: desc

ただし、getActiveNotificationsForUser はまだ順不同で通知を返しています。
これを修正するために私ができる理由または何を知っている人はいますか (すべての通知を取得して Python でソートすること以外に)?

前もって感謝します、

  • アーロン
4

1 に答える 1

3

db古いライブラリとは異なり、ndb.queryオブジェクトは不変です。そのため、フィルターまたは並べ替え順序を既存のクエリに追加すると、常に新しいものが返され、古いものは変更されません。これを行う必要があります:

q = q.order(-cls.raisedDate) 
于 2013-09-19T20:02:21.823 に答える