GQL-запрос для <missing> - PullRequest
       4

GQL-запрос для <missing>

8 голосов
/ 06 сентября 2010

При изменении моделей данных в ядре приложения для добавления новых свойств эти записи без определенного свойства отображаются со значением <missing> в онлайн-средстве просмотра данных.

Что мне интересно, как я могу написать запрос, чтобы найти эти записи?

Ответы [ 3 ]

8 голосов
/ 08 сентября 2010

Не существует прямого способа запроса более старых объектов с отсутствующим атрибутом, но вы можете спроектировать модель данных заранее для поддержки этого.Добавьте атрибут version к каждому классу модели.Версия должна иметь значение по умолчанию, которое увеличивается при каждом изменении и развертывании класса модели.Таким образом, вы сможете запрашивать объекты по номеру версии.

4 голосов
/ 06 сентября 2010

Нет способа запросить в хранилище данных сущности, у которых нет заданного свойства. Вам нужно перебрать все сущности и проверить каждую из них - возможно, с помощью mapreduce API .

0 голосов
/ 07 января 2014

Или вы можете создать сценарий для вставки нулевого значения для всех текущих элементов, у которых нет этого свойства, с помощью низкоуровневого API хранилища данных, поэтому вы можете запросить нулевое значение.и вот как я это решил.Грубый код будет выглядеть так:

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

    }
...