GAE db index 新發現 -- 可以有兩個以上的 order

今天在實作中發現,GAE 的 db 有個規則

如果在 query 當中用到了不等式,例如:我希望限制 status 欄位的值不要是 'A'

那麼後面第一個接的 order 欄位(如果要指定排序)就要是 status,不然會報錯

這應該跟 GAE db 的實作有關

錯誤原文:



BadArgumentError: First ordering property must be the same as inequality filter property, if specified for this query; received build_time, expected status


再來,我發現GAE db query 其實可以用兩以上個欄位去 order

例如我可以下這樣一連串的 query

query.filter("uid =", uid)
query.filter("payment_confirm_status =", payment_confirm_status)
query.filter("status !=", "credit_card-unpaid")
query.order("status")
query.order("-access_time")

可以看到 order 的欄位有兩個,但這樣也是可以的
只要新增下列index.yaml 項目就行

- kind: PaidOrder
  properties:
  - name: payment_confirm_status
  - name: uid
  - name: status
  - name: access_time
    direction: desc

同樣的原理,再看一個例子:

query.filter("vid =", vid)
query.filter("payment_confirm_status =", payment_confirm_status)
query.filter("status !=", "credit_card-unpaid")
query.order("status")
query.order('build_time')

只要新增下列 index.yaml 項目

- kind: PaidOrder
  properties:
  - name: payment_confirm_status
  - name: vid
  - name: status
  - name: build_time

上述例子經過測試無誤

留言

熱門文章