我已在Datastore中更新了我的模型,所以现在它有一个额外的字段。现在我有包含和没有该字段的实体,但我需要将此字段添加到尚未拥有它的所有实体。想法是在没有该字段的函数中获取实体并添加它。那么,我想知道如何在数据存储区请求中过滤这些实体?
答案 0 :(得分:1)
可能不那么容易,但我想这是可能的。
您无法获得没有属性的实体:
不使用与缺少财产的实体匹配的过滤器
无法查询缺少给定属性的实体。另一种方法是创建一个默认值为None的固定(建模)属性,然后为 None 作为属性值的实体创建一个过滤器。
您可以对该特定属性进行所有过滤:
对属性进行过滤或排序需要该属性存在
如果属性具有查询过滤条件或排序顺序,则查询仅返回具有该属性值(包括null)的数据存储区实体。 一种实体不需要具有相同的属性。属性上的过滤器只能匹配具有该属性值的实体。如果实体对过滤器或排序顺序中使用的属性没有值,则从为查询构建的索引中省略该实体。
我的建议是从所有密钥中获取密钥,并使用具有该属性的实体的密钥减去列表。
参考: http://code.google.com/intl/en-US/appengine/docs/python/datastore/queries.html#Overview
答案 1 :(得分:1)
您无法过滤属性不存在。每个查询都必须通过索引来满足,并且没有缺少给定属性的实体的“负索引”。
通常,您需要遍历所有实体,并忽略已具有该属性的实体。