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

Псевдо: выберите * из сообщений, в которых author_id отсутствует в {list_of_blocked_ids}

Поскольку Firestore не поддерживает array_not_contains или любые другие методы отрицания, мы совершенно не уверены, как структурировать эти данные, чтобы иметь возможность делать этот запрос.

Любая помощь в структурировании этой информации о заблокированных пользователях приветствуется.

0
larsd 16 Окт 2018 в 11:35

2 ответа

Лучший ответ

Чтобы решить эту проблему, согласно официальной документации, касающейся ограничений запроса :

Cloud Firestore не поддерживает следующие типы запросов:

  • Запросы с предложением ! = . В этом случае следует разделить запрос на запрос «больше» и «меньше». Например, хотя предложение запроса where ("age", "! =", "30") не поддерживается, вы можете получить тот же набор результатов, объединив два запроса, один с предложение where ("age", "<", "30") и одно с предложением где ("возраст", ">", 30).

Другими словами, в Firestore нет оператора != (не равно) или функции arrayNotContains(). Единственный вариант, который у вас есть, - это разделить ваш запрос на greater-than и less-than, и тогда он будет работать отлично.

0
Alex Mamo 17 Окт 2018 в 04:02

В каждый документ «беседы» поместите вложенные коллекции - одну под названием «сообщения», а другую - «черный список». Назначьте заблокированных пользователей uid как ключ к логическому значению true. Используйте правила Firestore для принудительной блокировки, а не запрос.

PSEUDO: разрешить чтение, запись, если этот uid не найден в этом черном списке разговоров

-1
Ronnie Royston 17 Окт 2018 в 14:53