Получение всех документов из одной коллекции в Firestore
Привет, я начинаю с javascript и реагирую, и я пытаюсь выяснить эту проблему часами. Может ли кто-нибудь объяснить мне, как получить все документы из коллекции firestore?
Я пытался это сделать:
async getMarkers() {
const events = await firebase.firestore().collection('events').get()
.then(querySnapshot => {
querySnapshot.docs.map(doc => {
console.log('LOG 1', doc.data());
return doc.data();
});
});
console.log('LOG 2', events);
return events;
}
Журнал 1 печатает все объекты (один за другим), но журнал 2 не определен, почему?
Ответы
Ответ 1
Пример в другом ответе излишне сложный. Это было бы более просто, если все, что вы хотите сделать, - вернуть исходные объекты данных для каждого документа в запросе или коллекции:
async getMarker() {
const snapshot = await firebase.firestore().collection('events').get()
return snapshot.docs.map(doc => doc.data());
}
Ответ 2
Я сделал это так:
async getMarkers() {
const markers = [];
await firebase.firestore().collection('events').get()
.then(querySnapshot => {
querySnapshot.docs.forEach(doc => {
markers.push(doc.data());
});
});
return markers;
}
Ответ 3
если вам нужно включить ключ документа в ответ, другой вариант:
async getMarker() {
const snapshot = await firebase.firestore().collection('events').get()
const documents = [];
snapshot.forEach(doc => {
documents[doc.id] = doc.data();
}
return documents;
}
Ответ 4
Вы можете получить всю коллекцию в виде объекта, а не массива, например:
async getMarker() {
const snapshot = await firebase.firestore().collection('events').get()
const collection = {};
snapshot.forEach(doc => {
collection[doc.id] = doc.data();
});
return collection;
}
Это даст вам лучшее представление о том, что в пожарном магазине. Нет ничего плохого в массиве, просто еще один вариант.
Ответ 5
Я предпочитаю скрывать всю сложность кода в моих службах... поэтому я обычно использую что-то вроде этого:
В моем events.service.ts
async getEvents() {
const snapchot = await this.db.collection('events').ref.get();
return new Promise <Event[]> (resolve => {
const v = snapchot.docs.map(x => {
const obj = x.data();
obj.id = x.id;
return obj as Event;
});
resolve(v);
});
}
В моем sth.page.ts
myList: Event[];
construct(private service: EventsService){}
async ngOnInit() {
this.myList = await this.service.getEvents();
}
Наслаждайтесь :)
Ответ 6
если вы хотите включить Id
async getMarkers() {
const events = await firebase.firestore().collection('events')
events.get().then((querySnapshot) => {
const tempDoc = querySnapshot.docs.map((doc) => {
return { id: doc.id, ...doc.data() }
})
console.log(tempDoc)
})
}
То же самое с массивом
async getMarkers() {
const events = await firebase.firestore().collection('events')
events.get().then((querySnapshot) => {
const tempDoc = []
querySnapshot.forEach((doc) => {
tempDoc.push({ id: doc.id, ...doc.data() })
})
console.log(tempDoc)
})
}