检查实体中字段是否存在

1 投票
2 回答
729 浏览
提问于 2025-04-16 23:27

我在数据存储中更新了我的模型,现在多了一个字段。现在我有一些实体是有这个字段的,有一些是没有的,但我需要把这个字段加到所有还没有这个字段的实体上。我的想法是,在一个函数中获取那些没有这个字段的实体,然后把它加上去。所以,我想知道我该如何在数据存储的请求中筛选出这些实体呢?

2 个回答

1

这可能不是那么简单,但我觉得是有可能的。

你不能获取没有某个属性的实体:

不能使用过滤器来匹配缺少属性的实体

你无法查询那些缺少特定属性的实体。一个替代方案是创建一个固定的(建模的)属性,并将其默认值设为None,然后为属性值为None的实体创建一个过滤器。

你可以对那个特定属性进行所有的过滤:

对属性进行过滤或排序需要该属性存在

如果一个属性有查询过滤条件或排序规则,查询只会返回那些在该属性上有值(包括空值)的数据实体。相同类型的实体不需要有相同的属性。对某个属性的过滤只能匹配那些在该属性上有值的实体。如果一个实体在过滤或排序中使用的属性上没有值,那么这个实体就会被从查询构建的索引中省略掉。

我的建议是获取所有实体的键,然后从中减去那些有该属性的实体的键列表。

参考链接: http://code.google.com/intl/en-US/appengine/docs/python/datastore/queries.html#Overview

1

你不能直接筛选出没有某个属性的东西。每个查询都必须通过一个索引来满足,而没有“负索引”这种说法,也就是没有专门记录缺少某个属性的实体。

通常情况下,你需要遍历所有的实体,然后忽略掉那些已经有这个属性的。

撰写回答