<missing> </missing>的GQL查询

时间:2010-09-06 15:23:17

标签: google-app-engine bigtable

当您在应用引擎上更改数据模型以添加新属性时,在线数据查看器中列出的值为<missing>的没有特定属性的条目。

我想知道的是如何编写查询来查找这些条目?

3 个答案:

答案 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);
            }
        }

    }