如何获取具有id的特定文档数据? | AngularFire 5.1.1 | Cloud Firestore |文件

时间:2019-01-07 08:16:51

标签: angular firebase google-cloud-firestore angularfire5

我正在使用数据访问服务从Firebase Firestore获取数据。

如何使用snapshotChanges()方法获取具有ID的特定文档数据

getProduct(id: number): Observable<Product> {
    this.productsDocuments = this.angularfirestore.doc<Product>('products/' + id);
    this.product = this.productsDocuments.snapshotChanges().pipe(
      map(changes => changes.map(a => {
        const data = a.payload.doc.data() as Product;
        const id = a.payload.doc.id;
        return { id, ...data };
      }))
    );
    return this.product

我想要this.product返回文档值和文档ID

谢谢!

1 个答案:

答案 0 :(得分:3)

文档只是对象{[field]: value} 收集是文档[document]

的容器

您正在尝试获取一个文档又名对象,而这里的问题是您无法直接映射它,我想您想获取整个集合,如果!您可以了解所有文档的地图

getProduct(id: number): Observable<Product> { const productsDocuments = this.db.doc<Product>('products/' + id); return productsDocuments.snapshotChanges() .pipe( map(changes => { const data = changes.payload.data(); const id = changes.payload.id; return { id, ...data }; })) }

收集

getProduct(id: string): Observable<Product[]> { const productsDocuments = this.db.collection<Product[]>('products'); return productsDocuments.snapshotChanges() .pipe( map(changes => changes.map(({ payload: { doc } }) => { const data = doc.data(); const id = doc.id return { id, ...data }; })), map((products) => products.find(doc => doc.id === id))) }

对不起,英语不好