射影クエリに特定のプロパティを含める必要があるのはなぜかと思います。「foo」プロパティの個別のリストを取得しようとしています。
Object.query(projection=[Object.foo], distinct=True) \
.filter(Object.username == user.nickname()) \
.filter(Object.bar >= value) \
.fetch()
これは、提案されたインデックスが稼働しているにもかかわらず、NeedIndexError を返します。その理由は、バー >= 値に基づく 2 番目のフィルターです。そのフィルターを削除すると、クエリは完璧に機能しますが、目標は達成されません。
Object.query(projection=[Object.foo, Object.bar], distinct=True) \
.filter(Object.username == user.nickname()) \
.filter(Object.bar >= value) \
.fetch()
これは機能しますが、結果は別個の foo だけではなく、foo と bar のデカルト積になります。そもそもそれは私たちが目指していたものではありません。
Object.query() \
.filter(Object.username == user.nickname()) \
.filter(Object.bar >= value) \
.fetch(projection=[Object.foo])
これも機能しますが、「foo」でグループ化する方法がないため、「foo」値が重複するリストが作成されます。
上記のように、この問題には解決策がありますが、どちらも回答リストが大きくなります。できればこれは避けたいです。したがって、2つの質問があります。
- filter() のプロパティをプロジェクションに含める必要がある場合があるのはなぜですか? これは私には意味がありません。また、これがより適切なものではなく、NeedIndexError になるのはなぜですか?
- 上記の欠点を持たないソリューションはありますか? それとも、間違った側からこの問題に取り組んでいますか? どんなアドバイスでも大歓迎です。