В Firestore, как я могу запросить элементы, созданные в диапазоне дат и порядке, по другому полю? - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь создать запрос на "топ сообщений за последнюю неделю / месяц / год". Я думал, что это будет просто, но я сталкиваюсь с ограничениями правил запросов Firestore.

Вот запрос, который я в идеале хотел бы выполнить:

db
  .collection(MY_COLLECTION)
  .where('created', '>', new Date(fromDate))
  .orderBy('score', 'desc')

Это дает мне эту ошибку :

FirebaseError: Неверный запрос. У вас есть фильтр where с неравенством (<, <=,> или> =) для поля «созданный», поэтому вы также должны использовать «созданный» в качестве первого Query.orderBy (), но ваш первый Query.orderBy ( ) вместо этого находится в поле «оценка».

Существует ли известная стратегия или обходной путь для этих типов запросов?

1 Ответ

1 голос
/ 19 апреля 2020

Чтобы устранить полученную ошибку, необходимо сначала упорядочить по полю created, как указано ниже:

db
  .collection(MY_COLLECTION)
  .where('created', '>', new Date(fromDate))
  .orderBy('created', 'desc')
  .orderBy('score', 'desc')

Это указано в документации :

Если у вас есть фильтр со сравнением диапазона (<, <=,>,> =), ваш первый порядок должен быть в том же поле.

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


Если вы хотите запросить все документы между двумя даты, вы можете использовать запрос как:

db
  .collection(MY_COLLECTION)
  .where('created', '>', new Date(fromDate))
  .where('created', '<=', new Date(toDate))
  .orderBy('created', 'desc')
  .orderBy('score', 'desc')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...