Query Firestore коллекция, основанная на отрицании - PullRequest
0 голосов
/ 16 октября 2018

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

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

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

0 голосов
/ 17 октября 2018

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

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

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

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

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