Angularefire2 - 查询未返回预期的响应

时间:2017-03-06 20:56:35

标签: angular firebase angularfire2

我正在尝试从firebase中获取一个包含电子邮件地址数组的列表。我只想要与查询中的电子邮件匹配的项目。这是结构。我正在尝试在test1@gmail.com

下获取与collaborators匹配的项目

enter image description here

查询:

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

1 个答案:

答案 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将为空,请告诉我。