2012-04-15 21 views
0

の値に基づいてフェッチ私はuserIdlist持っ年代を、と私はすべてのUser取得したい 'はlistuserIdでSをGAEでクエリを実行する方法はあります。Google App Engineがリスト

query.filter("userId IN", userIdList)

ような何かこれが不可能な場合は、最寄りの代替は何ですか?

答えて

2

これは、クエリを実行する代わりにキーで取得する場合は、簡単です。ユーザーオブジェクトのエンティティキーがエンティティキーである場合は、次のようにします。

# assume userIdList is a list of ints that are entity key ids 
user_keys = [ndb.Key('User', k) for k in userIdList] 
users = ndb.get_multi(user_keys) 
+0

まあ、私のユーザーIDリストは、電子メールにより実際には、その文字列のリスト。ここで質問があります:任意のユーザーIDだけをフェッチするのではなく、キーでフェッチする方が効率的ですか?この場合、ユーザーの電子メールですか?鍵コストを取って読み込みを減らすことはありますか? – Snowman

+0

私はこれに関する別の質問をしました:http://stackoverflow.com/questions/10164283/fetching-by-key-vs-fetching-by-filter-in-google-app-engine – Snowman

+0

キーによるフェッチは特にですここでは効率的です。なぜなら、 'IN'クエリはリスト内のすべてのアイテムに対して別々のクエリを評価するからです。したがって、N個のクエリの代わりに(それぞれがインデックスを読み取り、一致するエンティティをフェッチする)、単一のバッチ取得を実行しています。 –

0

コードは正確です。このためにはIN演算子が存在します。それを試しましたか?

https://developers.google.com/appengine/docs/python/datastore/queries

+0

キー名/ IDのクエリ/フィルタリングが可能ですか? – aschmid00

+0

ああ、私はこれがエンティティのIDであることを認識していませんでした。実際にはまだメタデータクエリを使用できます:https://developers.google.com/appengine/docs/python/datastore/metadataqueries#Kind_Queries –

+0

しかし、@mjibsonが示唆しているように、マルチgetを使用する方が良いでしょう。 –