EremeevAP
@EremeevAP
Что-то около веб-разработчика

Как в firebase получить сначала _не_решенные задачи?

У меня есть сайт с задачами. Для хранения всего использую Firebase.
Задачи хранятся в коллекции tasks.
Когда я нажимаю на кнопку я хочу получать задачу из тех, что я ещё не решал.
Как правильно организовать структуру БД чтобы это было возможно?

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

Заранее спасибо!
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
@luna3956
Добавить для каждой задачи флаг решена она или нет, например, назвать его solved, пусть 1 означает решена, 0 - не решена(true и false какое-то время назад некорректно работали поэтому на всякий лучше числовые значения использовать). И при обращении к коллекции указать что хотите получить только те, которые не решены(то есть у которых solved = 0) через equalTo. Про equalTo подробно здесь. Структура, соотвественно, будет:
tasks
 taskKey1
    taskID
    taskName
    solved
    ...
  taskKey2
    taskID
    taskName
    solved
     ....
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
RomReed
@RomReed
JavaScript, Flutter, ReactNative, Redux, Firebase
я бы сделал так создал бы ключ с tasks потом id пользователя и замет 2 ключа newTasks и doneTasks.
Ответ написан
Комментировать
@StrelnikovEugene
Нормального решения нет - фаирбейс не любит фильтрацию.

1. Elasticsearch.
Дольше разбираться, самый гибкий вариант. При любом дальнейшем усложнении базы проблем не возникнет.

Либо 2. Дублирование данных.
У пользователей храним список решенных задач, в задачах храним список решивших пользователей, отдельно где-то храним список всех айдишников всех задач и т.д.
При решении задачи надо будет обновлять данные в разных местах. Для уверенности что данные в разных ветках одинаковые, можно добавить firebase function

Либо 3. Security rules
Делаем отдельную коллекцию со списком пользователей, решивших задачу.
В документ каждой задачи добавляем какое-нибудь поле, которое ничего не значит
В настройках правил безопасности фаирстор даем доступ на чтение этого поля только тем пользователям, айди которых нет в списке решивших задачу.
При запросе данных делаем фильтр чтоб созданное поле было не нулем для этого пользователя.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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