当您在应用引擎上更改数据模型以添加新属性时,在线数据查看器中列出的值为<missing>
的没有特定属性的条目。
我想知道的是如何编写查询来查找这些条目?
答案 0 :(得分:8)
没有直接的方法来查询缺少属性的旧实体,但您可以预先设计数据模型以支持此功能。为每个模型类添加version
属性。版本应具有默认值,每次更改和部署模型类时都会增加该值。这样,您就可以按版本号查询实体。
答案 1 :(得分:4)
无法在数据存储区中查询没有给定属性的实体。您需要迭代所有实体并检查每个实体 - 可能使用mapreduce API。
答案 2 :(得分:0)
或者你可以创建一个脚本,在那里使用低级数据存储区API为那些没有该属性的所有当前项目添加空值,这样你就可以查询null。
我有这个问题,这就是我解决它的方法。粗略的代码看起来像:
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Query query = new Query("JDOObjectType");
List<Entity> results = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(9999));
for (Entity lObject : results) {
Object lProperty = lObject.getProperty("YOUR_PROPERTY");
if (lProperty == null) {
lObject.setProperty("YOUR_PROPERTY", null);
datastore.put(lProperty);
}
}
}