首页 > 解决方案 > Angular/Firestore 对文档中对象数组的值求和

问题描述

我在 Firestore 集合中有一个包含多个键值的文档,其中一个是对象数组,我想计算该 ID 的数组“会话”内的键“订单”的所有值的总和。

{
      id: "asdSDWESHGawhadah",
      name: "John",
      lastName: "Doe",
      age: "20",
      sessions: [

        {
          orders: 1
          date: 2019 - 11 - 24
        },
        {
          orders: 5
          date: 2019 - 11 - 26
        },
        {
          orders: 4,
          date: 2019 - 11 - 29
        },
      ],
    }

我无法在 HTML 中显示总和的结果(在本例中为 10)。我尝试在组件的打字稿中执行此操作,在该组件中调用为我提供文档的服务,但是该变量是带有我的接口的 Observable,因此我无法使用 map 或 reduce,我知道有一种使用 RxJs 的方法,我可以找不到一个很好的例子来理解,据我所知,它很复杂。有没有一种简单的方法可以直接从 Firestore 获取总和结果?

constructor(
private fbservice: FirebaseService,) {  }

  ngOnInit() {

        this.fbpatient$ = this.fbservice.getOnePatient(idPatient);  

  }
getOnePatient 方法为我带来了包含所有会话的数据,其中包含我想要求和的值,但正如我所说,我不能像正常的 javascript 对象那样使用 fbpatient$ 导致 Observable 的原因。

谢谢

标签: angulargoogle-cloud-firestore

解决方案


感谢用户 SnorreDan,我想出了这个解决方案,它对我有用,尽管我不知道这是最好的方法还是最佳实践。然后我按照 SnorreDan 的建议订阅 HTML {{mySumObservable$}}

let sum = 0;
    this.mySumObservable$ = this.fbservice.getOnePatient(idPatient).pipe(
      map((patient) => {
        patient.sessions.forEach((patient) => {
          sum = sum + patient.orders;
        });
        
        return sum;
      })
    ) as any;


推荐阅读