Движок приложения Google - Запрос только для поля - PullRequest
0 голосов
/ 02 июля 2011

Примечание: этот пример просто представляет проблему, а не реальный вариант использования

Я хотел бы знать, есть ли у меня определенные объекты, например, Car и CarCategory:

Owner
     - name
     - age

Car 
     - name
     - brand
     - category( reference )
     - owner ( reference )

CarCategory
     - name
     - property

Могу ли я запросить определенное поле?

Например, CarCategory:

query = GqlQuery ("SELECT category FROM Car")

Я получаю эту ошибку: BadQueryError: Ошибка синтаксического анализа: Не ожидается никаких дополнительных символов в символе Car

Обновление: Что, если вы хотите получить список всехкатегории, принадлежащие определенному пользователю

Я хотел бы сделать это наиболее эффективным способом.

Ответы [ 2 ]

1 голос
/ 11 августа 2013

Похоже, у вас есть больше вариантов, чем сортировка самостоятельно.Вы можете создать уникальное имя ключа для каждой из ваших категорий, например, «Bronco» или использовать уникальный созданный ключ «8HJ876KKL» (возможно, созданный uuid).Затем в сущности Car вы можете иметь свойство StringProperty с именем ключа категории.Вы можете сделать это StringListProperty, если хотите, чтобы автомобили принадлежали более чем к одной категории.Затем вы можете запросить категорию по номеру ключа.

Другой вариант - использовать ReferenceProperty в Car для указания на объект Category.Затем вы можете запросить точный ключ при поиске каждого автомобиля, принадлежащего категории.

Я не уверен, насколько эффективны запросы по сравнению с ReferenceProperty против StringProperty против StringListProperty.

1 голос
/ 04 июля 2011

Вы не можете запрашивать отдельные поля в хранилище данных App Engine.Объекты хранятся и извлекаются как сериализованные буферы протокола во всей их полноте, поэтому невозможно извлечь только определенные поля.

Учитывая абстракцию db.Model, разумного способа представления возвращаемых данных также не будет- вы не можете просто предоставить модель только с некоторыми заполненными полями, так как это может нарушить ограничения, и это определенно вызовет проблемы, если вы попытаетесь сохранить ее обратно в хранилище данных!

В ответ на ваше обновление:Это обычно требует объединения и агрегата, ни один из которых не поддерживается в App Engine.Лучший вариант - запросить и извлечь все Car сущности пользователя и классифицировать их по Category свойству.

...