我有一个用户帖子表,与Firebase文档中描述的完全相同: https://firebase.google.com/docs/database/web/read-and-write#update_specific_fields
//From docs
var updates = {};
//I'm not actually doing this
updates['/posts/' + newPostKey] = postData;
//I'm doing this
updates['/user-posts/' + uid + '/' + newPostKey] = postData;
return firebase.database().ref().update(updates);
我还有一个用户表,其中包含“friend-ids”列表:
"users": {
"USER-ID-1": {
...
"friends": [
"FRIEND-ID-1",
"FRIEND-ID-2"
]
}
}
我想知道如何从“user-posts”获取所有对象,其中ID位于当前用户的friends-array中?
这在文档中没有描述,我猜它是正确的数据模型,如果他们以它为例......? 我没有找到任何关于如何基于多个ID从表中获取所有实例的示例。
所以:如何将所有来自FRIEND-ID-1和FRIEND-ID-2的用户帖子作为一个列表返回,我可以循环并在视图中显示。
这可能吗?如果没有,怎么能实现呢?
感谢您的帮助! :)
答案 0 :(得分:1)
我认为这会让你走上正轨。
这些在我的构造函数中:
constructor(private db: AngularFireDatabase, public afAuth: AngularFireAuth) {}
这是我获取炒作的方法:
getFriendPosts(){
this.getListOfFriends().then(data => {
data.forEach(friend => {
this.db.database.ref("user-posts/" + friend.uid).once('value').then((snapshot) => {
snapshot.forEach(post => {
console.log(post.val());
});
}).catch((err) => {
console.log(err);
});
});
}).catch(err =>{
console.log(err);
});
}
getListOfFriends(){
let items: any = [];
var mList = [];
return this.db.database.ref("users/" + this.afAuth.auth.currentUser.uid + "/friends").once('value').then((snapshot) => {
snapshot.forEach(user => {
mList.push(user.val());
});
return items = mList;
}).catch((err) => {
return err;
});
}
PS:我没有测试过这段代码。另外,我建议您将朋友列表UID设置为对象而不是字符串。
"users": {
"USER-ID-1": {
...
"friends": [
"FRIEND-ID-1",
"FRIEND-ID-2"
]
}
}
to =>
"users": {
"USER-ID-1": {
...
"friends": [
{uid: "FRIEND-ID-1"},
{uid: "FRIEND-ID-2"}
]
}
}
或者,如果你想让它成为可观察列表,我会试试这个:
import { Observable } from 'rxjs/Observable';
items: Observable<any[]>;
this.items = db.list("user-posts/" + friend.uid).valueChanges();
所以也许是这样的:
listOfAllPosts: any = [];
friendPostsList: Observable<any[]>;
getFriendPosts(){
this.getListOfFriends().then(data => {
data.forEach(friend => {
this.friendPostsList = this.db.list("user-posts/" + friend.uid).valueChanges();
this.listOfAllPosts.push(this.friendPostsList);
});
}).catch(err =>{
console.log(err);
});
}