1

はNDBデータストアのAPIを使用して、私はGoogleのデータストアndb.AND対と

Entity.query(Entity.p1 == 1 and Entity.p2 == 2) 

または

Entity.query(ndb.AND(Entity.p1 == 1, Entity.p2 == 2)) 

のようなものを使用して複数のプロパティを含む何かのためのクエリを実行できることを、私を見つけましたこれらは同じ結果をもたらしますが、2番目のクエリはクエリを実行するためにプロパティp1とp2に余分なインデックスが必要です。同様に、ndb.ANDではなくクエリで.filterを使用すると、インデックスも必要ありません。これらのクエリデータストアの違いは何ですか?

答えて

4

注意してください。最初のバージョン( 'と')はフィルタの2番目の部分のみを評価します。

clause = (Entity.p1 == 1, Entity.p2 == 2) 

=>

何あなたに似て
(FilterNode('p1', '=', 1), FilterNode('p2', '=', 2)) 

:期待のフィルタで次のような結果を行う

clause = (Entity.p1 == 1 and Entity.p2 == 2) 
print clause 

=>

FilterNode('p2', '=', 2) 

:これを試してみてくださいndb.ANDの結果を使用して2番目の句すなわち:

AND(FilterNode('p1', '=', 1), FilterNode('p2', '=', 2)) 

(この場合、クエリの結果は同じです)。

単一のプロパティクエリに追加のインデックスが必要ないため、最初のクエリバージョン( 'と'を使用)に対してインデックスは生成されません。

関連する問題