Можно ли эффективно отфильтровывать сущности без значения, установленного для свойства типа TextProperty в Google Apps Engine? Как? - PullRequest
0 голосов
/ 11 января 2011

Мне недавно пришлось обновить одно из свойств моей модели с типа StringProperty до TextProperty, чтобы преодолеть ограничительный предел (максимум 500 символов). Это не было проблемой, пока я не понял некоторые из моих старых запросов, таких как:

SomeEntity.gql ('ГДЕ свойство1! =: 1', нет)

, где property1 - свойство в модели не может работать: - (.

Запрос ранее работал, и он помог мне выбрать только те объекты, для которых было установлено значение property1.

Как эффективно получить те же результаты в этом сценарии, где типом является TextProperty?

Ответы [ 2 ]

1 голос
/ 12 января 2011

Вы не можете фильтровать или заказывать в TextProperty.Чтобы достичь того, что вы хотите сделать, добавьте новый BooleanProperty 'has_text' и отфильтруйте его.Тогда вам просто нужно установить BooleanProperty при каждом изменении TextProperty.

Это решение следует общему соглашению Google App Engine по предварительному вычислению всего, что вы хотите фильтровать.

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

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

...