У меня есть две коллекции 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.
Любая помощь или совет здесь ценятся. Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Нет, невозможно выполнять запросы к коллекциям с разными именами в одном запросе. Нет операции типа "присоединиться".
То, чем вы сейчас занимаетесь, на самом деле не является «бомбардировкой» Firestore. Он создан, чтобы не отставать от большого количества чтений документов, и все запросы передаются по конвейеру через одно соединение. На самом деле здесь нет проблем с производительностью или масштабируемостью, если только вы не запрашиваете больше данных, чем вам нужно. На самом деле, Cloud Firestore просто не позволит вам делать что-то, что не масштабируется. Все индексированные операции значительно масштабируются.
Если он масштабируется, это здорово. Есть ли место, описывающее, что представляет собой «чтение» в статистике использования? Это имеет значение, когда вы пытаетесь снизить затраты.
От самой команды firebase, я думаю, это отвечает на мой вопрос. Большое спасибо за подтверждение, это выглядит нормально. Как человек из мира реляционных баз данных, я думал, что это пахнет, но я думаю, что нет!