https://developers.google.com/appengine/docs/java/datastore/projectionqueries
SELECT A FROM kind WHERE A = 1 not supportedのような射影クエリが必要なのはなぜですか?
https://developers.google.com/appengine/docs/java/datastore/projectionqueries
SELECT A FROM kind WHERE A = 1 not supportedのような射影クエリが必要なのはなぜですか?
意味がないからです。あなたは尋ねています
SELECT A FROM kind WHERE A = 1
だから、私A
にどこを教えてくださいA = 1
。まあ、あなたはすでにそれを知っていA = 1
ます。DBがそれを許可しても意味がありません。
クエリは、IN
内部的には一連の equals クエリがマージされたものであるため、同じロジックが適用されます。
この背後にある理由は、クエリしているプロパティの値が既にあるため、クエリによって返される必要がないということです。これはおそらく長期的には良いことですが、正直なところ、いずれにせよ App Engine はこれを許可する必要があります。実際にデータストアからこれらの値をフェッチしなかったとしても、バックグラウンドで返されたエンティティにそれらの値を追加して、ビジネスに取り掛かることができるようにする必要があります。
とにかく、ここでできることは...
query = MyModel.query().filter(MyModel.prop1 == 'value1', MyModel.prop2 == 'value2)
results = query.fetch(projection=[MyModel.prop3])
for r in results:
r.prop1 = 'value1' # the value you KNOW is correct
r.prop2 = 'value2'
繰り返しますが、これが舞台裏で行われるのは素晴らしいことです。プロジェクション リストでプロパティについて言及する場合、そのプロパティをエンティティの一部として使用することを既に述べています。それを実現するために、これ以上計算を行う必要はありません。
一方、これは追加の for ループにすぎません。:)