Как я могу отсортировать по атрибуту ключевого свойства в Google Cloud/Python?
Используя следующее ndb
Модельные классы:
class Product(ndb.Model):
name = ndb.StringProperty()
barcode = ndb.StringProperty()
class Donation(ndb.Model):
user= ndb.UserProperty()
product = ndb.KeyProperty(kind=Product)
При использовании запроса, такого как:
donations = Donation.query().order(Donation.product).fetch(1000)
Как я могу отсортировать полученные donations
от Product name
или же barcode
?
1 ответ
Вы не можете сделать такой запрос, по крайней мере, с хранилищем данных. Порядок сортировки может быть только одним из свойств соответствующей модели объекта.
Каждому запросу требуется один или несколько соответствующих индексов хранилища данных. Для упорядоченных запросов вам нужны составные индексы, определенные в index.yaml
файл. Каждый такой индекс имеет ровно один kind
в его определении нельзя смешивать несколько типов сущностей (Donation
с Product
в твоем случае).
Если вам нужны такие запросы, вы можете продублировать необходимую информацию и заполнить ее при обновлении product
имущество. Также если / когда соответствующие Product
изменения свойств вам может потребоваться обновить все Donation
лица, ссылающиеся на него.
Возможно, приемлемым промежуточным положением будет использование фактического product
значение свойства (сам ключ) для заказа запроса - по крайней мере, у вас будут все пожертвования, связанные с одним и тем же объектом продукта, сгруппированные вместе.