Firebase структурирует данные для получения результата дополнения - PullRequest
0 голосов
/ 11 декабря 2018

Я застрял в собственном приложении, использующем базу данных Firebase в реальном времени.У меня есть модель с пользователями и вопросами, где один пользователь может ответить на многие вопросы, и многие пользователи могут ответить на один вопрос (отношение многие ко многим).

Мне нужно отобразить вопросы, на которые пользователь A не ответил..

В настоящее время моя база данных структурирована так:

"questions" : {
   "q1" : {
      "description" : "Who am I?",
      "users" : {
        "userA" : {
           "answered" : true
        }
      }
   },
   "q2" : {
      "description" : "Where am I?",
      "users" : {
        "userB" : {
           "answered" : true
        }
      }
   }
 }

Затем я пытаюсь получить q2 (вопрос, на который не ответил пользователь A), как этот

const ref = firebase.database().ref('questions');
ref.orderByChild('/users/userA/answered').equalTo(null).on('value', (snapshot) => {
  console.log(snapshot.val());
});

Работает, выбирая нужные данные, но я застрял со следующими проблемами:

  1. Эта структура выглядит неэффективной из-за своей глубоко вложенной зависимости.Я искал некоторые ссылки, и они предложили сгладить данные, используя middlenode, такой как questions_users / users_questions (используя ссылки на question_id и user_id).Однако я не смог реализовать этот подход из-за запроса типа .equalTo(null).Я просто не смог найти способ получить все вопросники, на которые пользователь А не ответил ..

  2. Я попытался проиндексировать атрибут questions/$questionId/users/$userId/answered.Но он продолжает утверждать, что я не проиндексировал его правильно ..

Данные правил имеют такую ​​структуру:

{
  "rules": {
    ".read": true,
    ".write": true,
    "questions" : {
      "$questionId" : {
        "users" : {
          "$userId" : {
            ".indexOn" : ["answered"]
          }
        }
      }
     }
  }
}

Я пользователь Postgresql, поэтомуЯ не использую такую ​​структуру, я очень скучаю по условиям соединения): Спасибо

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