Google cloud firestore 使用angularfire2获取单个文档的最简单方法

Google cloud firestore 使用angularfire2获取单个文档的最简单方法,google-cloud-firestore,angularfire2,Google Cloud Firestore,Angularfire2,我正试图有一个基本的表格,以便我可以更新数据。 我可以查询一个完整的集合(也可以选择在客户端过滤我需要的数据,如果它还不适合我的话) 我知道id后可以查询单个单据。 但我希望使用业务条件查询集合,并能够将其添加到我的视图中(当然,还希望在通过表单更新数据时获得更新数据的方法) 事实上,我的问题似乎非常接近 但是: 在我看来,获取所有数据并进行过滤是一个糟糕的解决方案 我试过了,但我不确定是否理解这个示例中所有付款和付款的含义(类型)(我想这是一个商务类,如果是这样,好的): getPaymen

我正试图有一个基本的表格,以便我可以更新数据。 我可以查询一个完整的集合(也可以选择在客户端过滤我需要的数据,如果它还不适合我的话)

我知道id后可以查询单个单据。 但我希望使用业务条件查询集合,并能够将其添加到我的视图中(当然,还希望在通过表单更新数据时获得更新数据的方法)

事实上,我的问题似乎非常接近 但是:

  • 在我看来,获取所有数据并进行过滤是一个糟糕的解决方案

  • 我试过了,但我不确定是否理解这个示例中所有付款和付款的含义(类型)(我想这是一个商务类,如果是这样,好的):

    getPaymentByBookingId(id: string): Observable<Payment> {
     return this.afs.collection<Payment>('payments')
         .valueChanges()
         .pipe(
        map(allPayments=>allPayments.find(payment=>payment.bookingId === id))
       );
     }
    
    getPaymentByBookingId(id:string):可观察{
    返回此.afs.收款(“付款”)
    .valueChanges()
    .烟斗(
    映射(allPayments=>allPayments.find(payment=>payment.bookingId==id))
    );
    }
    
我刚收到一封信

    Cannot read property '<my_attribute' of undefined

无法读取属性',正如您所建议的,在客户端进行筛选不是实现这一点的理想方法。您需要在
bookingId
上查询集合,然后
limit()

这仍将返回一个包含一个项目的数组(
limit(1)
),但您可以使用
flatMap()
将结果展平,以获得单个
付款:

getPaymentByBookingId(id: string): Observable<Payment> {
    return this.afs
        .collection<Payment>('payments', ref => ref.where('bookingId', '==', id).limit(1))
        .valueChanges()
        .pipe(
            flatMap(payments => payments)
        );
}
getPaymentByBookingId(id:string):可观察{
把这个还给我
.collection('payments',ref=>ref.where('bookingId','=',id.)。限额(1))
.valueChanges()
.烟斗(
flatMap(付款=>付款)
);
}

正如您所建议的,在客户端进行过滤并不是实现这一点的理想方法。您需要在
bookingId
上查询集合,然后
limit()

这仍将返回一个包含一个项目的数组(
limit(1)
),但您可以使用
flatMap()
将结果展平,以获得单个
付款:

getPaymentByBookingId(id: string): Observable<Payment> {
    return this.afs
        .collection<Payment>('payments', ref => ref.where('bookingId', '==', id).limit(1))
        .valueChanges()
        .pipe(
            flatMap(payments => payments)
        );
}
getPaymentByBookingId(id:string):可观察{
把这个还给我
.collection('payments',ref=>ref.where('bookingId','=',id.)。限额(1))
.valueChanges()
.烟斗(
flatMap(付款=>付款)
);
}

这对我很有用。谢谢下一步我将找到如何获得该组件的异步版本,因为我在加载组件时获得firestore的值,在重新加载之前不会显示更改。这对我很有用。谢谢下一步将让我找到如何获取该组件的异步版本,因为我在加载组件时获取firestore的值,在重新加载之前不会显示更改。