の値に基づいてフェッチ私はuserId
のlist
持っ年代を、と私はすべてのUser
取得したい 'はlist
でuserId
でSをGAEでクエリを実行する方法はあります。Google App Engineがリスト
query.filter("userId IN", userIdList)
ような何かこれが不可能な場合は、最寄りの代替は何ですか?
の値に基づいてフェッチ私はuserId
のlist
持っ年代を、と私はすべてのUser
取得したい 'はlist
でuserId
でSをGAEでクエリを実行する方法はあります。Google App Engineがリスト
query.filter("userId IN", userIdList)
ような何かこれが不可能な場合は、最寄りの代替は何ですか?
これは、クエリを実行する代わりにキーで取得する場合は、簡単です。ユーザーオブジェクトのエンティティキーがエンティティキーである場合は、次のようにします。
# 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)
コードは正確です。このためにはIN
演算子が存在します。それを試しましたか?
https://developers.google.com/appengine/docs/python/datastore/queries
キー名/ IDのクエリ/フィルタリングが可能ですか? – aschmid00
ああ、私はこれがエンティティのIDであることを認識していませんでした。実際にはまだメタデータクエリを使用できます:https://developers.google.com/appengine/docs/python/datastore/metadataqueries#Kind_Queries –
しかし、@mjibsonが示唆しているように、マルチgetを使用する方が良いでしょう。 –
まあ、私のユーザーIDリストは、電子メールにより実際には、その文字列のリスト。ここで質問があります:任意のユーザーIDだけをフェッチするのではなく、キーでフェッチする方が効率的ですか?この場合、ユーザーの電子メールですか?鍵コストを取って読み込みを減らすことはありますか? – Snowman
私はこれに関する別の質問をしました:http://stackoverflow.com/questions/10164283/fetching-by-key-vs-fetching-by-filter-in-google-app-engine – Snowman
キーによるフェッチは特にですここでは効率的です。なぜなら、 'IN'クエリはリスト内のすべてのアイテムに対して別々のクエリを評価するからです。したがって、N個のクエリの代わりに(それぞれがインデックスを読み取り、一致するエンティティをフェッチする)、単一のバッチ取得を実行しています。 –