Вы можете денормализовать ваши данные и добавить в существующую структуру базы данных еще один узел, который облегчит ваш запрос:
"topics": {
"topic1": {
"task1": {
"ts123": "record data",
"ts212": "record data",
...
},
"task2": {
"ts154": "record data",
"ts223": "record data",
...
},
"topic2": {...},
...
},
"topicsTasks": { // <- new first level node
"topic1_task1": {
"ts123": "record data",
"ts212": "record data",
...
},
"topic1_task2": {
"ts123": "record data",
"ts212": "record data",
...
},
"topic2_task1": {
"ts123": "record data",
"ts512": "record data",
...
},
"topic2_task2": {
"ts183": "record data",
"ts282": "record data",
...
},
....
Для моделирования баз данных NoSQL довольно классно дублировать данные таким образом, чтобы облегчить /оптимизирует ваши запросы.
Для одновременной записи в два узла ("themes" и "themesTasks") вы должны использовать метод update()
, как описано здесь: https://firebase.google.com/docs/database/web/read-and-write#update_specific_fields
Чтобы запросить последние 10 элементов, вы должны сделать следующее:
database.ref('topicsTasks/topic1_task1').limitToLast(10).once("value")
.then(snapshot => {
snapshot.forEach(doc => {
console.log(doc.val());
});
})
.catch(err => {
console.log('Error getting documents', err);
});
Обратите внимание, что database.ref('topicsTasks/topic1_task1').limitToLast(10)
- это запрос.Док о Query находится здесь: https://firebase.google.com/docs/reference/js/firebase.database.Query