Проверьте, присутствует ли поле в объекте - PullRequest
1 голос
/ 12 августа 2011

Я обновил свою модель в Datastore, теперь у нее есть дополнительное поле.Теперь у меня есть объекты с этим полем и без него, но мне нужно добавить это поле ко всем объектам, у которых его еще нет.Идея состоит в том, чтобы получить сущности в функции без этого поля и добавить их.Итак, мне интересно, как я могу фильтровать такие объекты в запросах хранилища данных?

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Вы не можете фильтровать для несуществования свойства.Каждый запрос должен быть удовлетворен индексом, и нет «отрицательного индекса» сущностей, у которых нет заданного свойства.

Как правило, вам нужно будет выполнять итерации по всем сущностям и просто игнорировать те, которые уже имеютсобственность.

1 голос
/ 12 августа 2011

Это может быть не так просто, но я думаю, что это возможно.

Вы не можете получить объекты без свойства:

Нет использования фильтров, соответствующих объектамОтсутствует свойство

Невозможно запросить объекты, у которых отсутствует указанное свойство.Один из вариантов - создать фиксированное (смоделированное) свойство со значением по умолчанию None, а затем создать фильтр для сущностей со значением None .

Вы можете получить всефильтрация по этому конкретному свойству:

Фильтрация или сортировка по свойству требует наличия свойства

Если свойство имеет условие фильтра запроса или порядок сортировки,запрос возвращает только те объекты хранилища данных, которые имеют значение (включая ноль) для этого свойства.Сущности такого типа не обязательно должны иметь одинаковые свойства.Фильтр для свойства может соответствовать только сущности со значением для этого свойства.Если у сущности нет значения для свойства, используемого в фильтре или порядке сортировки, эта сущность исключается из индекса, созданного для запроса.

Я предлагаю получить ключи от всех и вычестьсписок с ключами от сущностей с этим свойством.

Ссылка: http://code.google.com/intl/en-US/appengine/docs/python/datastore/queries.html#Overview

...