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

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

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

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

Заранее спасибо!
  • Вопрос задан
  • 99 просмотров
Решения вопроса 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
Делаем отдельную коллекцию со списком пользователей, решивших задачу.
В документ каждой задачи добавляем какое-нибудь поле, которое ничего не значит
В настройках правил безопасности фаирстор даем доступ на чтение этого поля только тем пользователям, айди которых нет в списке решивших задачу.
При запросе данных делаем фильтр чтоб созданное поле было не нулем для этого пользователя.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы