我正在尝试从firebase中获取一个包含电子邮件地址数组的列表。我只想要与查询中的电子邮件匹配的项目。这是结构。我正在尝试在test1@gmail.com
collaborators
匹配的项目
查询:
this.firebase.list('/todo', {
query: {
orderByChild: 'collaborators',
equalTo: 'test1@gmail.com'
}
}).subscribe((data)=>{
console.log(data);
});
这个返回空数组应该列出一个项目!
我该如何解决这个问题..
解决方案:
let results = this.firebase.list('/todo')
.map(data => data.filter( (e) => {
return e.collaborators.indexOf(email) > -1;
}
));
return results
答案 0 :(得分:1)
您尝试访问该电子邮件地址,就好像它是collaborators
的值一样。实际上,电子邮件地址是其中一个孩子的价值。
我建议重组你的模型,把电子邮件作为关键而不是价值;例如,test1@gmail.com: true
。我提到了这方面的一些优点,并在下面的评论中提供了一些涵盖该主题的链接。
对模型进行微小更改后,使用map
运算符映射到collaborators
并使用filter
运算符过滤掉collaborators
对象包含属性的对象其关键字匹配email
。
getNotesFromSpecifiedUser(email: string): Observable<any> {
let results = this.af.database.list('/todo')
.map(data => data.filter(data => (email in data.collaborators)))
return results
}
重要提示:如果collaborators
中没有条目,则会引发错误,因为in
关键字无法处理null。如果可以想象collaborators
将为空,请告诉我。