У меня есть две коллекции Firestore, одна называется parents
, а другая - children
. Эти коллекции «связаны» тем, что parents
имеет массив child
ссылок на документы, прикрепленных к ним.
Что я хочу сделать, это: Получить все children
, которые «связаны» с одним parent
быстрым способом.
Что я пробовал: Я придумал этот код, который прекрасно работает функционально:
this.subscription = this.props.firebase.parent().onSnapshot((parent) => { // get a single parent
let childrenPromises = (parent.data().children || []).map(child => this.props.firebase.child(child.id).get()); // build array of promises
Promise.all(childPromises) // resolve all promises
.then(children => {
// children.data() has the data I need :)
});
});
Подводя итог: Я получаю список child
ссылок на документы, а затем, используя обещания, извлекаю их все по отдельности. Это прекрасно работает, но бомбардирует мою базу данных запросами.
Что я хочу улучшить: Можно ли как-то реорганизовать это в один, более производительный запрос? В идеале это был бы один запрос, чтобы предотвратить столько запросов к БД.
Что я пробовал: Я прочитал все документы Firestore и сообщения о переполнении стека, которые мне не удалось найти без удачи. Я читал, что отмена нормализации БД - это вариант, но я бы предпочел этого не делать, поскольку несколько parents
могут быть привязаны к children
.
Любая помощь или совет здесь приветствуется. Спасибо!