Angularefire2 - 查询没有 return 预期的响应

Angularefire2 - query does not return expected response

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

下的 test1@gmail.com 匹配的项目

查询:

this.firebase.list('/todo', {
        query: {
            orderByChild: 'collaborators',
            equalTo: 'test1@gmail.com'
        }
    }).subscribe((data)=>{
        console.log(data);
    });

这个return空数组应该列出一项!

我该如何解决..

解法:

let results = this.firebase.list('/todo')
        .map(data => data.filter( (e) => {
            return e.collaborators.indexOf(email) > -1;
        }
    ));
    return results

您正在尝试访问电子邮件地址,就好像它是 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 会是空的,请告诉我。