我正在尝试重建数据库,并且在这样做之后遇到了麻烦,试图用表中的数据填充表。
这是我的数据库的新结构。
因此,我们可以看到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);
});
});
每个评论阵列都已注销
我什至无法注销单个对象-我假设甚至console.log(element.reviews [0])都可以,但是它说“无法读取未定义的属性0”。我只能登出整个评论数组。
我要寻找的是一次迭代并从每个文档中检索每个审阅的内容,并将它们分配到一个大对象数组中,以用作MatTableDataSource的源。
如此
[
{county: Cork, dateAdded: " ", ...},
{county: Cork, dateAdded: " ", ...},
{county: Clare, dateAdded: " ", ...}
]
在我以前的简单数据库结构中,这是一个简单的操作,因为我可以检索整个集合并将其分配给数组。该结构对于其他功能来说是不切实际的,因此现在我包括了有意义的ID。
任何帮助将不胜感激,这花费的时间变得非常愚蠢。我已经搜寻了互联网和解决方案文档,但是我开始觉得我从数据库结构开始就做错了。
答案 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值。