我决定对我的Firebase数据库进行非规范化以尝试使连接变得更容易,但是我仍然处于非规范化之前的位置。
问题在于:
我连接到user_address表并根据传入的位置过滤地址,这将是状态。
每个地址条目都有一个用户个人资料ID,$key
然后,我使用它来连接到个人资料表,并检索与传入的$key
匹配的个人资料。
到目前为止,这是我的代码:
getSearchResults(location: string): Observable<any[]> {
var usersAddress = this.af.database.list('/user_address/', {
query: {
query: {
orderByChild: 'State',
equalTo: location
}
}
}).map(address => {
address.map(entry => {
entry.profile = this.af.database.object('/users/' + entry.$key)
});
console.log(address);
return address;
});
return usersAddress;
}
两个问题。
1)当我删除return userAddress
时,我得到Observable<any[]>
下的红色错误行,其中包含:声明类型既不是'void'也不是'any'的函数必须返回一个值。
2)运行console.log(address)
时,我看到以下内容:
此处的问题是个人资料的类型为:FirebaseObjectObservable
,我希望看到用户个人资料...
任何人都可以解释我如何解决这个问题?我个人觉得到目前为止我编写代码的方式并不完全正确,即有两个返回语句是一个明显的问题。
**更新**
好的,所以这段代码按预期工作:
this.results = this.af.database.list('/user_address/', {
query: {
query: {
orderByChild: 'State',
equalTo: location
}
}
}).map(addresss => {
addresss.map(address => {
this.af.database.object('/users/' + address.$key)
.subscribe(user => {
address.userdata = user;
});
this.af.database.list('/user_photos/' + address.$key, {
query: {
orderByChild: 'Profile_Pic',
equalTo: true
}
}).subscribe(photo => {
address.photos = photo;
})
return address;
})
return addresss;
});
return this.results
但是我在控制台中看到两个关于.indexOn的警告:
FIREBASE WARNING: Using an unspecified index. Consider adding ".indexOn": "Profile_Pic" at /user_photos/uuBldNXtXlSvK1fOKMTQzCKMqlj2 to your security rules for better performance
我知道如何修复,但是因为我看到两个我只能假设这可能会返回两个数据集?