Как мне отфильтровать документы с определенным запросом порядка в Firestore?

Фон

Я пытаюсь реализовать функцию блокировки в своем приложении для социальных сетей. В настоящее время один из запросов фида сортирует / упорядочивает документы по созданной ими временной метке в хронологическом порядке.

Предложенное решение

Для публикации в магазине приложений Apple нам необходимо реализовать функцию блокировки. Я подумал легко: создайте в пользовательском документе поле со строковым массивом blockedUsers. Теперь, когда вы запрашиваете поле, используйте оператор not in, который поддерживает Firestore, и вы можете получить список документов, которые:

  • not in массив blockedUsers
  • заказано by выполненоTimestamp
  • limit в x для целей нумерации страниц

Проблема

Однако, прочитав документацию по операторам in и not in, вы не можете упорядочить документы по полю, отличному от поля сравнения, которое вы фильтруете. В данном случае not in.

https://firebase.google.com/docs/firestore/query-data/order-limit-data

Вопрос

Я несколько не понимаю, как структурно реализовать заблокированную функцию, которая будет фильтровать документы в нашей коллекции GlobalPosts, исключая заблокированных пользователей, упорядоченных в хронологическом порядке, с разбивкой на страницы.

Я хотел бы услышать любые предлагаемые решения, не волнуйтесь, если это нарушит нашу текущую схему, это может способствовать некоторым другим идеям, однако сохранение нашей текущей схемы предпочтительнее.


person Garrett    schedule 14.12.2020    source источник
comment
То, что вы пытаетесь сделать, невозможно с помощью одного запроса Firestore, независимо от того, как вы структурируете данные. По крайней мере, вам понадобится комбинация нескольких запросов и некоторой сортировки или фильтрации на стороне клиента. Скорее всего, это будет дороже, чем вам хотелось бы.   -  person Doug Stevenson    schedule 14.12.2020
comment
@DougStevenson Спасибо за совет, простой клиентский фильтр смог обработать нашу функцию.   -  person Garrett    schedule 16.12.2020


Ответы (1)


Публикуем это как вики сообщества, поскольку оно основано на комментарии Дуга Стивенсона к вопросу:

То, что вы пытаетесь сделать, невозможно с помощью одного запроса Firestore, независимо от того, как вы структурируете свои данные из-за ограничений, которые вы указали в документации.

Таким образом, вам понадобится комбинация нескольких запросов и некоторой сортировки или фильтрации на стороне клиента, и это, вероятно, будет дороже, чем вам хотелось бы.

person Community    schedule 15.12.2020