当您更改应用程序引擎上的数据模型以添加新属性时,那些没有特定属性的条目将与<missing>
在线数据查看器中的值一起列出。
我想知道如何编写查询来查找这些条目?
当您更改应用程序引擎上的数据模型以添加新属性时,那些没有特定属性的条目将与<missing>
在线数据查看器中的值一起列出。
我想知道如何编写查询来查找这些条目?
没有直接的方法来查询缺少属性的旧实体,但您可以预先设计数据模型来支持这一点。为每个模型类添加一个version
属性。版本应该有一个默认值,每次更改和部署模型类时都会增加该值。这样您就可以按版本号查询实体。
无法在数据存储中查询没有给定属性的实体。您需要遍历所有实体并检查每个实体——可能使用mapreduce API。
或者,您可以使用低级数据存储 API 创建一个脚本,为所有当前不具有该属性的项目添加 null,这样您就可以查询 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);
}
}
}