2016-01-27 2 views
1

Использование Query в хранилище данных App Engine, как указать, чтобы выбрать ключи, соответствующие свойству с значениями переменных?google app engine datastore Go Query с оператором «in»

var Person struct { 
    name string 
    department string 
} 

//Query 
q := datastore.NewQuery("Person").Filter("department = ", "department1").KeysOnly() 

В приведенном выше запросе вместо «=» оператор, я хочу «IN» оператор указать более 1 отдел значение, т.е. выборки ключей персоны, которые принадлежат к department1, department2, department3 и т.д.

Возможно ли это с 1 запросом? Или мне нужно сделать 1 запрос для каждого отдела?

ответ

1

Другие операционные системы позволяют оператору «IN» запрашивать данные хранилища данных. Это, однако, просто удобство: под капотом, datastore makes individual queries for each element in the list.

Если у вас относительно небольшое количество сущностей, может быть более эффективным получить все из них, а затем отфильтровать результаты на основе свойства «department», а не выдавать N запросов для поиска N возможных отделов.

0

Я считаю, что вы можете использовать вложенные вызовы фильтра с фильтрами равенства, чтобы получить ваш предполагаемый результат.

Если вы посетите https://cloud.google.com/appengine/docs/go/datastore/queries#Go_Filters и выполните поиск «Свойства с несколькими значениями могут вести себя удивительными способами», вы увидите пример.

Итак, если вы делаете следующее, это может дать вам то, что вы хотите.

q := datastore.NewQuery("Person").Filter("department = ", "department1").Filter("department = ", "department2").Filter("department = ", "department3").KeysOnly() 
+0

Это не работает. свойство отдела не является списком. –

Смежные вопросы