Как выбрать несколько ссылок на документы в одном запросе?

У меня есть две коллекции 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.

Любая помощь или совет здесь ценятся. Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
178
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет, невозможно выполнять запросы к коллекциям с разными именами в одном запросе. Нет операции типа "присоединиться".

То, чем вы сейчас занимаетесь, на самом деле не является «бомбардировкой» Firestore. Он создан, чтобы не отставать от большого количества чтений документов, и все запросы передаются по конвейеру через одно соединение. На самом деле здесь нет проблем с производительностью или масштабируемостью, если только вы не запрашиваете больше данных, чем вам нужно. На самом деле, Cloud Firestore просто не позволит вам делать что-то, что не масштабируется. Все индексированные операции значительно масштабируются.

От самой команды firebase, я думаю, это отвечает на мой вопрос. Большое спасибо за подтверждение, это выглядит нормально. Как человек из мира реляционных баз данных, я думал, что это пахнет, но я думаю, что нет!

Sloth Armstrong 14.06.2019 16:23

Если он масштабируется, это здорово. Есть ли место, описывающее, что представляет собой «чтение» в статистике использования? Это имеет значение, когда вы пытаетесь снизить затраты.

pinguinos 14.06.2019 16:23

Другие вопросы по теме