Невозможно с помощью библиотек мобильных / веб-клиентов получить в одном запросе данные документа Firestore и данные документов его подколлекций.
Нет даже способа получить список вложенных коллекций документа (с мобильными / веб-клиентскими библиотеками), см. https://firebase.google.com/docs/firestore/query-data/get-data#list_subcollections_of_a_document
Так что вам нужно знать имявложенные коллекции, чтобы запросить их, что является вашим случаем (name = 'исторический').
Вы можете сделать следующее.Сначала вы получаете все родительские документы и одновременно используете Promise.all()
для параллельного запроса всех «исторических» вложенных коллекций.
var db = firebase.firestore();
var promises = []
db.collection('locations').get()
.then(snapshot => {
snapshot.forEach(doc => {
let location = doc.data()
location.id = doc.id
location.name = doc.data().name
console.log(location);
promises.push(doc.ref.collection('historic').get());
})
return Promise.all(promises);
})
.then(results => {
results.forEach(querySnapshot => {
querySnapshot.forEach(function (doc) {
console.log(doc.id, " => ", doc.data());
});
});
});
Обратите внимание, что порядок results
массив точно такой же, как порядок массива promises
.
Также обратите внимание, что для получения значения элемента документа (например, name
) вам нужно сделать doc.data().name
, а не doc.name
.