将 .groupBy 与 Firestore 收集数据一起使用
Using .groupBy with Firestore collection data
我有一个包含多个作业的 Firestore 集合,但我想在客户端按作业编号对它们进行分组。我已经在网上浏览了很多示例,例如 this.jobs = this.afs.collection('jobs').valueChanges().pipe(groupBy((job: any) => job.jobNumber), mergeMap(group => group.pipe(toArray())));
但没有成功。我有的是
工作
- 工作编号 1
- 工作编号 2
- 工作编号 3
- 工作编号 1
但我想要的是
工作
- [工作编号 1,工作编号 1]
- [工作编号 2]
- [工作编号 3]
问题是,当您订阅 valueChanges()
时,它会变得 hot 可观察并且永远不会完成,因此您无法获得想要的结果 - 流应该如何知道所有 1 号工作 什么时候到达吗?不过,可以采取一些变通办法,f.ex。添加一个 timeout
并使用 scan
收集累加器主题等中的所有值,然后合并它们并发出。
但是,如果您已经将所有数据存储在本地,这有意义吗?可能不会。 IMO,你只能在它到达后使用响应,f.ex。创建主题并根据 job number 1
对它们调用 next()
。
我有一个包含多个作业的 Firestore 集合,但我想在客户端按作业编号对它们进行分组。我已经在网上浏览了很多示例,例如 this.jobs = this.afs.collection('jobs').valueChanges().pipe(groupBy((job: any) => job.jobNumber), mergeMap(group => group.pipe(toArray())));
但没有成功。我有的是
工作 - 工作编号 1 - 工作编号 2 - 工作编号 3 - 工作编号 1
但我想要的是
工作 - [工作编号 1,工作编号 1] - [工作编号 2] - [工作编号 3]
问题是,当您订阅 valueChanges()
时,它会变得 hot 可观察并且永远不会完成,因此您无法获得想要的结果 - 流应该如何知道所有 1 号工作 什么时候到达吗?不过,可以采取一些变通办法,f.ex。添加一个 timeout
并使用 scan
收集累加器主题等中的所有值,然后合并它们并发出。
但是,如果您已经将所有数据存储在本地,这有意义吗?可能不会。 IMO,你只能在它到达后使用响应,f.ex。创建主题并根据 job number 1
对它们调用 next()
。