0

https://developers.google.com/appengine/docs/java/datastore/projectionqueries

SELECT A FROM kind WHERE A = 1 not supportedのような射影クエリが必要なのはなぜですか?

4

2 に答える 2

4

意味がないからです。あなたは尋ねています

SELECT A FROM kind WHERE A = 1

だから、私Aにどこを教えてくださいA = 1。まあ、あなたはすでにそれを知っていA = 1ます。DBがそれを許可しても意味がありません。

クエリは、IN内部的には一連の equals クエリがマージされたものであるため、同じロジックが適用されます。

于 2013-03-30T09:03:01.330 に答える
0

この背後にある理由は、クエリしているプロパティの値が既にあるため、クエリによって返される必要がないということです。これはおそらく長期的には良いことですが、正直なところ、いずれにせよ 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 ループにすぎません。:)

于 2013-05-23T23:31:45.107 に答える