Appengine фильтруют неравенство и заказывающие сбои

Не могли бы вы попробовать добавить. Надеюсь, это сработает. Если вы предоставите мне проект, я могу помочь вам лучше.

@Component({
 selector: 'page-loginpage',
 templateUrl: 'loginpage.html',
 providers: [NavParams]
})
23
задан Dan McGrath 2 September 2016 в 22:57
поделиться

4 ответа

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

Это часто можно обойти, добавив свойство, которое может быть отфильтровано с равенством; в этом случае может быть возможным иметь BooleanProperty, отслеживающий, относится ли объект к текущей неделе, и обновлять его для всех объектов в конце каждой недели.

20
ответ дан 29 November 2019 в 02:51
поделиться

В хранилище данных есть некоторые ограничения на запросы. Нельзя объединять фильтр неравенства по одному свойству с порядком по свойству пыльника. Вы можете найти больше ограничений здесь:

https://cloud.google.com/appengine/docs/python/ndb/queries

3
ответ дан 29 November 2019 в 02:51
поделиться

С тех пор я не знаю, но текущий SDK может возвращать немного различную ошибку:

BadArgumentError: First ordering property must be the same as inequality filter property, if specified for this query; received ranking, expected submitted

В моем случае я мог бы обойти эту ошибку следующим образом:

query.filter("submitted >=" thisweek).order("submitted").order("ranking")

Отредактировано 2013-02-08: Как упомянул в комментарии Horselover Fat, он позволяет избежать только ошибки.

-1
ответ дан 29 November 2019 в 02:51
поделиться

Я использовал другой трюк, который сработал просто из-за формата, в котором мне были нужны мои данные (список dicts). В этом случае я запускаю запрос на основе даты и времени, создаю dicts из возвращенных энтов, а затем сортирую по числовому свойству counter. Изменение сортировки дало мне порядок убывания. Имейте в виду, что я запросил только 10 результатов в довольно небольшом хранилище данных.

q = food.Food.all()
q.filter("last_modified <=", now)
q.filter("last_modified >=", hour_ago)

ents = q.fetch(10)

if ents:
  results = [{
    "name": ent.name,
    "counter": ent.counter
    } for ent in ents]

  # reverse list for 'descending' order
  results.sort(reverse=True)

Пример результата:

[{'counter': 111L, 'name': u'wasabi'}, {'counter': 51L, 'name': u'honeydew'}, {'counter': 43L, 'name': u'mars bar'}, {'counter': 37L, 'name': u'scallop'}, {'counter': 33L, 'name': u'turnip'}, {'counter': 29L, 'name': u'cornbread'}, {'counter': 16L, 'name': u'mackerel'}, {'counter': 10L, 'name': u'instant coffee'}, {'counter': 3L, 'name': u'brussel sprouts'}, {'counter': 2L, 'name': u'anchovies'}]
3
ответ дан 29 November 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: