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
会是空的,请告诉我。
我正在尝试从 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
会是空的,请告诉我。