Фильтрация по свойствам ссылки в App Engine с использованием Objectify
Гипотетический код:
@Entity
public class MyEvent {
@Id Long id;
@Index String name;
Ref<Location> myLocation;
}
@Entity
public class Location {
@Id Long id;
@Index String city;
@Index String country;
}
Есть ли способ для меня, чтобы сделать фильтр, чтобы найти все события в определенном городе? Похоже, что требуется соединение, которое не поддерживается, но я хотел проверить еще раз, так как не могу найти окончательный ответ.
Кроме того, каков правильный способ структурирования данных, если этот тип фильтрации невозможен? Нужно ли иметь денормализованный объект MyEvent со всеми полями, по которым я мог бы фильтровать?
1 ответ
Как вы можете прочитать в документации Objectify, свойства Ref являются скорее сахаром Objectify, чем функцией хранилища данных. Они хранятся в качестве свойств ключа в хранилище данных, поэтому невозможно выполнить запрос к свойствам объекта, на который может указывать ключ.
Если вы хотите запросить события в городе, вы можете либо сохранить город события в самом событии и запросить его, либо запросить все местоположения в городе, а затем запросить любые события, соответствующие этим местоположениям (то есть, запросив ключи местоположения, которые хранятся на событиях). Третий вариант - превратить города в реальные объекты с полем "Тип коллекции" "События". Вы также можете использовать запросы предков - для получения дополнительной информации см. Документы " Запросы хранилища данных".