遍历Firestore地图阵列

时间:2019-09-17 13:31:34

标签: arrays angular typescript google-cloud-firestore maps

我正在尝试重建数据库,并且在这样做之后遇到了麻烦,试图用表中的数据填充表。

这是我的数据库的新结构。

img of Firestore layout

因此,我们可以看到newLayout> User ID> reviews,它是一组地图。我可以登出一个完整的评论阵列,但无法弄清楚如何访问甚至登出评论阵列中的每个对象/地图。


    this.firebaseService.getNewReports().subscribe(docs => {

      this.reports =  docs.map(item => {

        return {
          id:  item.payload.doc.id,
          ...item.payload.doc.data()
        };
      });   

      this.reports.forEach(element => {

        console.log(element.reviews);

      });

    });

每个评论阵列都已注销

img of appears when I console.log the reviews

我什至无法注销单个对象-我假设甚至console.log(element.reviews [0])都可以,但是它说“无法读取未定义的属性0”。我只能登出整个评论数组。

我要寻找的是一次迭代并从每个文档中检索每个审阅的内容,并将它们分配到一个大对象数组中,以用作MatTableDataSource的源。

如此

    [
    {county: Cork, dateAdded: " ", ...}, 
    {county: Cork, dateAdded: " ", ...},
    {county: Clare, dateAdded: " ", ...}
    ]

在我以前的简单数据库结构中,这是一个简单的操作,因为我可以检索整个集合并将其分配给数组。该结构对于其他功能来说是不切实际的,因此现在我包括了有意义的ID。

Previous database structure

任何帮助将不胜感激,这花费的时间变得非常愚蠢。我已经搜寻了互联网和解决方案文档,但是我开始觉得我从数据库结构开始就做错了。

1 个答案:

答案 0 :(得分:1)

编辑:

如果您想要的输出是单个数组,例如...

[
  {county: Cork, dateAdded: " ", ...}, 
  {county: Cork, dateAdded: " ", ...},
  {county: Clare, dateAdded: " ", ...}
]

..然后在您的forEach中,使用散布运算符将每个数组的内容推入此处为finalReports的数组,如下所示:

  finalReports = [];

  // ...

  this.reports.forEach(element => {
    this.finalReports.push(...element.reviews)
  });

如果您愿意,也可以更早地完成它:

  docs.map(item => {
    this.finalReports.push(...item.payload.doc.data().reviews)
  });   

原始帖子:

经过一番思考;)我认为弄清楚了您希望输出的外观如何,即:

[
  {
    A11: [{county: ....}, {...}]
  }, 
  {
    A154: [{county: ...}, {...}]
  }   
]

可以通过以下方式实现:

this.reports =  docs.map(item => {
  return {
    return { [item.payload.doc.id] : item.payload.doc.data().reviews }
  };
});  

因此,我们将id设置为prop名称,并将有效载荷中的数组reviews设置为prop值。