Моя структура данных выглядит так (удаленные ненужные части):
{
"threads" : {
"PUSHID" : {
"info" : {
"members" : {
"uid" : true,
"uid2" : true
}
}
}
}
}
Я пытаюсь написать некоторый javascript, чтобы вытащить моментальные снимки потоков, в которые пользователь входит, но я не могу понять, как он работает, не вытягивая моментальные снимки каждого потока. Теперь это мой код, который вытягивает каждый снимок потока.
firebase.database().ref('threads').on('child_added', function(snapshot) {
if (snapshot.hasChild('info/members/' + userUid)) {
// Display thread info
}
});
Я попытался сделать запрос с .orderByChild('info/members/' + userUid)
и удалить нулевые снимки, но мне пришлось бы добавить .indexOn
для каждого userUid
что явно нецелесообразно.
Ваша текущая структура позволяет легко/эффективно искать пользователей для потока. Но ваш вариант использования - поиск потоков для пользователя. Вам нужно увеличить модель данных, чтобы разрешить прецедент:
{
"user_threads" : {
"uid": {
"PUSHID": true,
"PUSHID2": true
},
"uid2": {
"PUSHID": true,
"PUSHID3": true
}
}
}
И затем прочитайте это с помощью:
firebase.database().ref('user_threads/'+userUid).on('child_added', function(snapshot) {
...
});
Изменение или расширение вашей модели данных в соответствии с прецедентами вашего приложения довольно распространено при использовании баз данных NoSQL.