Я использую объект под названием «Documento» для хранения данных в firestore, а затем, когда я получаю эти данные, я сохраняю их в структуре JSON. Моя проблема в том, что теперь мне нужно выполнить три запроса. Один - расписание, другой - врач, а третий - его типа. Все три из них хранятся в разных запросах, теперь в моем расписании должно быть имя врача из коллекции врачей и его тип, который находится в моей третьей коллекции.
Поэтому я хотел бы знать, как запросить их вместе и объединить в один объект, чтобы я мог отображать информацию о моем пациенте вместе с информацией о его докторе, что привело бы к моему расписанию, которое будет переведено в HTML.
Вот скриншот того, как структурирована моя база / хранилище огня:
Мое расписание, в котором должен быть какой-то внешний ключ

Тогда вот как я получаю свои данные из firestore в виде объекта в структуре JSON:
carregarPerfil(){
var query = firebase.firestore().collection("Usuario")
var auxint = 0;
this.dataAux
let auxString = '[';
query.where('Documento.nome', '==', 'Merlin').where('Documento.login', '==', 'merlin').get().then(res => {
res.forEach(item => {
auxint++;
auxString += '{"id":"' + item.id + '","Usuario":' + JSON.stringify(item.data()) + '}';
console.info(item);
if (res.size != auxint)
auxString += ', ';
})
auxString += ']';
this.dataJSON = JSON.parse(auxString);
this.Usuario = this.dataJSON;
console.info(this.Usuario);
}).catch(err => {
console.info('algum erro ' + err);
});
}
Я пробовал читать документацию по firestore, но из-за того, что он не рассматривает его как JSON и не показывает, как это сделать, используя 3 пошаговых запроса, мне было сложно, поэтому мне нужно некоторая помощь в этом.
Я обновил основной пост, добавив более подробную картину моей текущей структуры. В любом случае, не могли бы вы привести пример того, как я могу связать эти запросы после обработки обещаний?
Правильно ли я понимаю, что в документе с повесткой дня у вас есть идентификаторы трех других документов (Especialidade, Medico и Patiente), и вы хотите получить информацию из этих трех документов в конце (за один раз)?
Да, это именно то, что мне нужно сделать, и я не могу понять, мне нужен атрибут nome от Medico, мне нужен атрибут nome от Paciente, и мне нужен nome от Especialidade, и перечислите их с данными повестки дня, что-то вроде внешнего ключа в основном, денормализация займет некоторое время, так как я не уверен, что парень, занимающийся обработкой, справится с этой работой
Смотрите мой ответ. Обратите внимание, что в ответе мы нет объединяем несколько обещаний в цепочку, поскольку мы выполняем их параллельно, а не последовательно. Напротив, мы используем Promise.all().
Да, просто пытаюсь выяснить, что вызвало Uncaught (в обещании): TypeError: невозможно прочитать коллекцию свойств undefined
заменить db на firebase.firestore(). Адаптирую ответ
Удивительный! это прекрасно работает, это действительно спасло жизнь! Только один вопрос, как я могу распечатать данные с помощью интерполяции строк?
Позвольте нам продолжить обсуждение в чате.





Следующее поможет. Поскольку вы хотите получить три документа в параллели и поскольку метод get() является асинхронным и возвращает обещание, вам необходимо использовать Promise.all(). Обратите внимание, что массив results имеет тот же порядок, что и массив promises (поэтому первым элементом results является документ especialidade, затем - medico и т. д.).
Обратите внимание, что я адаптировал названия коллекций на английский язык. Просто измените, чтобы использовать свои собственные имена коллекций. Идентификаторы документов также должны быть адаптированы к вашим.
var db = firebase.firestore();
var promises = []
var especialidadeQuery = db.collection('specialties').doc('xTWQVLM8O9WRx89LS1Ba').get();
promises.push(especialidadeQuery);
var medicoQuery = db.collection('doctors').doc('CP5Gd2UwGyDYqs9eXuGl').get();
promises.push(medicoQuery);
var patienteQuery = db.collection('patients').doc('AMZpmX9BOyRlfPQpwfmz').get();
promises.push(patienteQuery);
Promise.all(promises).then(results => {
results.map(docSnapshot => {
console.info(docSnapshot.data());
});
});
Однако обратите внимание, что если вам просто нужны имена пациента, врача и специализации, вы можете сохранить эти значения непосредственно в документе повестки дня. Этот механизм денормализации довольно распространен в слове базы данных NoSQL и позволяет оптимизировать запросы (здесь 1 вместо 1 + 3).
Вы можете цепь три запроса с
then(), один за другим. Фактически, поскольку методget()является асинхронным и возвращает обещание, вы должны дождаться разрешения обещания, прежде чем сможете использовать значения, возвращаемые запросом. Вы должны предоставить гораздо больше деталей о своей структуре данных (т. Е. О трех коллекциях), чтобы сообщество могло вам помочь. Другой подход - денормализовать ваши данные и, например, добавить тип врача в документ врача, уменьшив количество запросов до 2.