Angular Firebase Firestore获取文档ID

时间:2018-07-23 01:22:45

标签: firebase google-cloud-firestore angularfire2

我的Firebase Firestore数据库是这样的:

Collection:orders
    DocumentID: (autogenerated)
         Document: orderName: string

这样声明的变量:

    orderCollection: AngularFirestoreCollection<Order>
    orders: Observable<Order[]>

我正在得到所有这样的“订单”:

orderCollection = this.afs.collection('orders');
orders = this.orderCollection.valueChanges();

然后我要打印这样的订单:

<tr *ngFor="let o of orders | async">
    <td>{{o.orderName}}</td>
    <td><a (click)="editOrder(o.$key)">Edit</a></td>
</tr>

直到编辑部分,一切都正常。

对于编辑:如何发回订单的文档ID?我想发回订单文件ID,以便随后对其进行编辑。使用实时数据库,您可以使用$ key进行某些操作,但不能使用firestore。有建议吗?

2 个答案:

答案 0 :(得分:0)

在AngularFirestore中,它只是document.id。但是,要执行此操作,必须使用snapshotChanges而不是valueChanges。所以:

orders = this.orderCollection.snapshotChanges();

然后:

<tr *ngFor="let o of orders | async">
    <td>{{o.data().orderName}}</td>
    <td><a (click)="editOrder(o.id)">Edit</a></td>
</tr>

Firestore Getting documents id from collectionGet Collections with Document Ids Included的启发。

答案 1 :(得分:0)

导入

import { map } from 'rxjs/operators';

并在您的界面中确保包含ID

export interface Order{
  id?:string
  foo1?: string
  foo2?: string
  foo3?: string
}

您的函数看起来像这样

this.orderCollection = this.afs.collection<Order>('orders');
 this.orders = this.orderCollection.snapshotChanges().pipe(
      map(kazi => {
      return kazi.map(a => {
          const data = a.payload.doc.data();
          const id = a.payload.doc.id;

          return { id, ...data };
      });
      })
  );

获取结果

  this.orders.forEach(order =>{
      console.log(order)   
})

我希望会对您有所帮助