我想知道爲什麼你需要在投影查詢中包含某些屬性。我試圖得到一個明確的'foo'屬性列表。爲什麼在過濾器中使用NDB屬性需要包含在投影查詢中?
Object.query(projection=[Object.foo], distinct=True) \
.filter(Object.username == user.nickname()) \
.filter(Object.bar >= value) \
.fetch()
即使建議的索引已啓動並正在運行,本文也會給出NeedIndexError。原因是基於bar> = value的第二個過濾器。通過刪除該過濾器,查詢工作完美,但沒有達到目標。
Object.query(projection=[Object.foo, Object.bar], distinct=True) \
.filter(Object.username == user.nickname()) \
.filter(Object.bar >= value) \
.fetch()
這一個工程,但現在你沒有一個結果只有獨特的foos,但foo和酒吧的carthesian產品。首先,這不是我們的目標。
Object.query() \
.filter(Object.username == user.nickname()) \
.filter(Object.bar >= value) \
.fetch(projection=[Object.foo])
這一個也可以,但是沒有辦法按「富」,從而導致重複的「foo'值的列表。
這個問題的解決方案,你可以看到上面,但都導致更大的響應列表。如果可能,我想避免這種情況。因此,我有兩個問題:
- 爲什麼filter()中的屬性有時需要包含在投影中?這對我沒有意義。另外,爲什麼這會導致NeedIndexError而不是更合適的?
- 有沒有解決方案沒有上述缺點?或者,也許我從錯誤的方面解決這個問題?任何建議是受歡迎的。