有没有办法做到在GAE查询在那里我有userId
的list
的,我想获取所有User
“与在list
userId
秒。谷歌应用程序引擎取得被基于值列表
喜欢的东西query.filter("userId IN", userIdList)
如果这是不可能的,什么是最接近的替代产品?
有没有办法做到在GAE查询在那里我有userId
的list
的,我想获取所有User
“与在list
userId
秒。谷歌应用程序引擎取得被基于值列表
喜欢的东西query.filter("userId IN", userIdList)
如果这是不可能的,什么是最接近的替代产品?
如果您通过键而不是运行查询来获取,这很简单。如果你的用户对象的用户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)
你的代码是完全正确的。为此目的存在IN
运算符。你试过了吗?
https://developers.google.com/appengine/docs/python/datastore/queries
您确定可以查询/过滤关键名称/ ID吗? – aschmid00 2012-04-15 16:55:21
哦,我没有意识到这是实体的ID。实际上,您仍然可以通过元数据查询:https://developers.google.com/appengine/docs/python/datastore/metadataqueries#Kind_Queries – 2012-04-15 16:58:18
但是,您最好是使用multi get,就像@mjibson所建议的那样。 – 2012-04-15 16:58:57
那么我的用户ID列表实际上是电子邮件,所以它是一个字符串列表。现在的问题是:通过密钥获取而不是通过任意用户标识获取效率更高,在本例中是用户的电子邮件?按键读取成本较低? – Snowman 2012-04-15 17:11:40
我已经提出了一个关于此问题的单独问题:http://stackoverflow.com/questions/10164283/fetching-by-key-vs-fetching-by-filter-in-google-app-engine – Snowman 2012-04-15 17:22:00
通过键获取特别是这里效率很高,因为'IN'查询针对列表中的每个项目评估为单独的查询。因此,而不是N个查询(每个查询读取一个索引,然后获取匹配的实体),您正在执行一个批处理。 – 2012-04-16 07:24:09