Appengine - 具有未知列表大小的ndb查询

时间:2014-09-25 10:24:06

标签: python google-app-engine google-cloud-datastore

我有一个用Python编写的appengine项目。 我使用的模型带有tags = ndb.StringProperty(repeated=True)

我想要的是,给定一个标签列表,搜索列表中包含每个标签的所有对象。 我的问题是列表可能包含任意数量的标签。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

当您对列表属性进行查询时,它实际上会在数据存储级别创建一组子查询。单个查询可以生成的最大子查询数为30.因此,如果列表中包含的元素数超过30个,则会出现异常。

要解决此问题,您必须更改数据库模型或根据您拥有的列表元素数创建多个查询,然后合并结果。这两种方法都需要由您的代码处理。

更新:如果您需要列表中的所有标记与模型中的list属性匹配,那么您可以创建基本查询,然后在循环中追加AND运算符(如marcadian描述的那样) )。例如:

qry = YourModel.query()
qry = qry.filter(YourModel.tags == tag[i]) for enumerate(tags)

但是,正如我之前提到的,你应该注意模型中list属性的长度和索引配置,以避免像index blast这样的问题。有关此内容的更多信息,请查看: