App Engine, Как проверить, все ли значения в списке находятся в списке строк в хранилище данных - PullRequest
0 голосов
/ 30 ноября 2010

Если у вас есть список строк в хранилище данных со значениями:

a, b, c

Как вы можете сравнить его со списком, чтобы он возвращал true только если каждыйзначение в списке строк присутствует в списке?

['a', 'b'] вернет false

['a', 'b', 'c'] вернет значениеtrue

['a', 'b', 'c', 'd', 'e'] вернет true

Возможно ли это только с помощью GQL или мне нужно нажатьиз списка строк и зациклить его?

Ответы [ 3 ]

2 голосов
/ 01 декабря 2010

Это напрямую невозможно. Вы можете использовать несколько фильтров равенства, и запрос будет соответствовать только тем объектам, у которых есть хотя бы те элементы в списке (например, «WHERE foo = 'a' И foo = 'b'» будет соответствовать только в том случае, если foo - это список, содержащий минимум "а" и "б"). Если вы сделаете это без фильтров неравенства или порядка сортировки, хранилище данных будет использовать встроенную стратегию объединения слиянием для удовлетворения вашего запроса.

Однако денормализация обеспечит более надежные решения. Например, если вы сериализовали свой список как одну строку, вы можете просто проверить на равенство с этой строкой.

2 голосов
/ 30 ноября 2010

С документация :

Запрос не может сравнивать два списка значений.Невозможно проверить два списка на равенство, не проверив каждый элемент на предмет членства в отдельности.

Так что я думаю, что ваше сравнение также невозможно напрямую.Эффективно использовать наборы для сравнения, а не циклически повторять список.

1 голос
/ 30 ноября 2010

Вы можете сериализовать свой список в отсортированном виде как один StringProperty. В зависимости от содержимого вашего StringListProperty это может быть так же тривиально, как и значения, разделенные запятыми.

При желании вы можете использовать что-то вроде контрольных сумм md5, чтобы уменьшить длину строки, которая хранится и фильтруется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...