Как получить один документ по ID Angular 4 + Firestore
Как заставить это работать хорошо? Мне нужен только один документ из базы с id. Можно ли на него подписаться? Потому что он возвращает мне наблюдаемый объект:(
Вот мой код.
getByid(id){
return this.itemscollection.doc('9K6ue-afwwafwaf').valueChanges();
}
4 ответа
Я думаю, что вы пытаетесь сделать это:
constructor(db: AngularFirestore){
db.collection('yourcollection').doc("documentid").ref.get().then(function (doc) {
if (doc.exists) {
console.log(doc.data());
} else {
console.log("There is no document!");
}
}).catch(function (error) {
console.log("There was an error getting your document:", error);
});}
Вышеизложенное - самый простой способ, которым я знаю, чтобы прочитать документ в пожарном депо. Он покажет внутренние данные из вашего документа. Я надеюсь, что это поможет вам.
Попробуем преобразовать наблюдаемое в обещание вот так
async getDocument(docId:string){
let document = await this.afs.doc(docId).get().toPromise();
return document.data();
}
If you also want the
id
of the document and use an observable instead, do:
this.firestore.collection('collection').doc('someid').snapshotChanges().subscribe(
res => {
this.item= { id: res.payload.id, ...res.payload.data() as InterfaceName };
},
err => {
console.debug(err);
}
)
Прежде всего, вы должны убедиться, что ваш идентификатор правильный. И я полагаю, вы использовалиAngularFirestore
для подключения к Firebase.
public this.itemsCollection = null;
public constructor(private af: AngularFirestore) {
this.itemCollection = this.af.collection('Your-colection-name');
}
public getById(docId: string): any {
return this.itemCollection
.doc(docId)
.valueChanges()
.subscribe(item => {
return item;
// If you prefer including itemId back to object
// return {...item, id: docId}
});
}