Я застрял в собственном приложении, использующем базу данных 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());
});
Работает, выбирая нужные данные, но я застрял со следующими проблемами:
Эта структура выглядит неэффективной из-за своей глубоко вложенной зависимости.Я искал некоторые ссылки, и они предложили сгладить данные, используя middlenode, такой как questions_users / users_questions (используя ссылки на question_id и user_id).Однако я не смог реализовать этот подход из-за запроса типа .equalTo(null)
.Я просто не смог найти способ получить все вопросники, на которые пользователь А не ответил ..
Я попытался проиндексировать атрибут questions/$questionId/users/$userId/answered
.Но он продолжает утверждать, что я не проиндексировал его правильно ..
Данные правил имеют такую структуру:
{
"rules": {
".read": true,
".write": true,
"questions" : {
"$questionId" : {
"users" : {
"$userId" : {
".indexOn" : ["answered"]
}
}
}
}
}
}
Я пользователь Postgresql, поэтомуЯ не использую такую структуру, я очень скучаю по условиям соединения): Спасибо