【问题标题】:Angularefire2 - query does not return expected responseAngularefire2 - 查询不返回预期的响应
【发布时间】:2017-03-07 08:12:47
【问题描述】:

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

查询:

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

【问题讨论】:

    标签: angular firebase angularfire2


    【解决方案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 关键字无法处理空值。如果可以想象collaborators 会为空,请告诉我。

    【讨论】:

    • 我收到此错误this.firebase.list(...).map is not a function
    • 需要导入算子。 import 'rxjs/add/operator/map'
    • 这会返回一个空数组
    • 我做了一个对我有用的小改动!接受提示使用地图和过滤器的答案
    • 您永远不想依赖客户端访问限制。您的数据库及其数据的路径将始终可见。您必须通过规则限制访问。如果您的数据库中的任何地方都存在敏感数据,则应该对其进行加密。
    猜你喜欢
    • 2021-06-05
    • 2021-04-24
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多