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

Python Appengine-列表大小未知的ndb查询,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我有一个用Python编写的appengine项目。 我使用一个带有tags=ndb.StringProperty(repeated=True)的模型 我想要的是,给定一个标记列表,搜索列表中包含每个标记的所有对象。 我的问题是列表可能包含任意数量的标记 我该怎么办?当您对列表属性进行查询时,它实际上会在数据存储级别创建一组子查询。单个查询最多可以生成30个子查询。因此,如果列表中的元素超过30个,则会出现异常 为了解决这个问题,您必须更改数据库模型,或者根据列表元素的数量创建多个查询,然后合并

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

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


我该怎么办?

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

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

更新:如果需要列表中的所有标记来匹配模型中的列表属性,则可以创建基本查询,然后在循环中附加and运算符(如marcadian所述)。例如:

qry = YourModel.query()
qry = qry.filter(YourModel.tags == tag[i]) for enumerate(tags)
但是,正如我前面提到的,您应该注意模型中列表属性的长度和索引配置,以避免索引爆炸之类的问题。有关这方面的更多信息,您可以查看:


谢谢,这又增加了一件我不知道的事情。但问题是不同的。正如我在这里看到的,我可以拥有列表中至少有一个标记的所有对象。但是我想要列表中包含所有标记的对象。我不能用list[0]、list[1]……list[n]作为第一个例子,因为我不知道n……我想你可以添加和过滤类似.filter(Model.tags==tag[I]),因为我在enumerate(tags)中是个新手,我不理解这样写的代码(它在'for'上给了我语法错误),我还在搜索一些相关文档,但如果我使用过滤器和“正常”的话,它确实可以工作,非常感谢:)