#javascript #firebase #google-cloud-firestore #rxjs #angularfire2
#javascript #firebase #google-cloud-firestore #rxjs #angularfire2
Вопрос:
Когда я пытаюсь получить документ из вложенной коллекции, я получаю объект, содержащий только значения из документа.
Ответ выглядит так:
{
id: mealDocumentId,
name: 'Burger',
imageUrl: 'imgUrl1',
price: 3, quantity: 1
}
Есть ли способ получить объект из всего документа?
Я ожидал объекты из документов, подобных этому:
{
mealDocumentId1: {
name: 'Burger1',
imageUrl: 'imgUrl1',
price: 1,
quantity: 1,
},
mealDocumentId2: {
name: 'Burger2',
imageUrl: 'imgUrl2',
price: 2,
quantity: 2,
},
}
Код, который я запускаю:
constructor(private db: AngularFirestore) { }
getAllMealDocuments() {
// this is the path to the subselection meals
const docRef = this.db.collection('tables').doc('documentId').collection('meals');
// try to get a document object and pass it.
return docRef.snapshotChanges().pipe(map(document => {
document.map(doc => {
return new Meal({
id: doc.payload.doc.id,
...(doc.payload.doc.data() as {})
});
});
}));
}
Есть ли другой способ получить все документы? Предпочтительно, как ожидаемый формат?
Спасибо!
Ответ №1:
Похоже, вы ищете documentChanges
поток, который (в отличие valueChanges
от) включает идентификатор каждого документа в свой вывод.
Я бы рекомендовал ознакомиться с документацией AngularFire по потоковым данным коллекции для типов потоков и различий между ними.
Комментарии:
1. Привет, Фрэнк! Спасибо за быстрый ответ. Вы правы, я хочу получить идентификатор, и поэтому я вызвал snapshotChanges. Моя проблема в том, что когда я перебираю полученные данные, я возвращаю все значения из документа, а не из объектов документа. Знаете ли вы, является ли это единственным способом получения документов?
2. Что вы подразумеваете под «объектами документа» и «ожидаемым форматом»? В коде, которым вы поделились в своем обновлении, вы можете сохранить
doc
или извлечьdoc.id
иdoc.data()
. Я не уверен, какой другой вариант вы ищете.3. Я хочу вернуть документы другим способом. Итак, теперь я получаю объекты типа {…}, но я хочу получать пары ключ-значение, такие как {documentId: {…value …}} . documentId должен быть ключом, а «все остальное» — значением… Надеюсь, это понятно. 🙂
4. Это не вариант из AngularFire API, поэтому вам придется преобразовать
documentChanges
поток в нужный формат.