2012-04-15 64 views
0

有没有办法做到在GAE查询在那里我有userIdlist的,我想获取所有User“与在listuserId秒。谷歌应用程序引擎取得被基于值列表

喜欢的东西query.filter("userId IN", userIdList)

如果这是不可能的,什么是最接近的替代产品?

回答

2

如果您通过键而不是运行查询来获取,这很简单。如果你的用户对象的用户ID是他们的实体密钥,那么你可以这样做:

# 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列表实际上是电子邮件,所以它是一个字符串列表。现在的问题是:通过密钥获取而不是通过任意用户标识获取效率更高,在本例中是用户的电子邮件?按键读取成本较低? – Snowman 2012-04-15 17:11:40

+0

我已经提出了一个关于此问题的单独问题:http://stackoverflow.com/questions/10164283/fetching-by-key-vs-fetching-by-filter-in-google-app-engine – Snowman 2012-04-15 17:22:00

+0

通过键获取特别是这里效率很高,因为'IN'查询针对列表中的每个项目评估为单独的查询。因此,而不是N个查询(每个查询读取一个索引,然后获取匹配的实体),您正在执行一个批处理。 – 2012-04-16 07:24:09

0

你的代码是完全正确的。为此目的存在IN运算符。你试过了吗?

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

+0

您确定可以查询/过滤关键名称/ ID吗? – aschmid00 2012-04-15 16:55:21

+0

哦,我没有意识到这是实体的ID。实际上,您仍然可以通过元数据查询:https://developers.google.com/appengine/docs/python/datastore/metadataqueries#Kind_Queries – 2012-04-15 16:58:18

+0

但是,您最好是使用multi get,就像@mjibson所建议的那样。 – 2012-04-15 16:58:57