一个例子是他们是聊天室的两个成员。或者当前用户正在关注他们。
所以理论上用户节点
users
alovelace
followed_by
bill: true
frank: true
in_chat_room: room_42
location: France
ghopper
followed_by
jay: true
in_chat_room: room_27
location: USA
eclarke
followed_by
frank: true
in_chat_room: room_42
location: Canada
和一些聊天室
chat_rooms
room_27
ghopper: true
room_42
lovelace: true
eclarke: true
要获得用户的详细用户节点在聊天室42(洛夫莱斯,eclarke)
let usersRef = self.myRootRef.childByAppendingPath("users")
usersRef.queryOrderedByChild("in_chat_room").queryEqualToValue("room_42")
.observeEventType(.Value, withBlock: { snapshot in
for child in snapshot.children {
let location = child.value["location"] as! String
print(location) //prints France and Canada
}
})
要获得用户Frank正在关注(lovela CE,eclarke):
let usersRef = self.myRootRef.childByAppendingPath("users")
usersRef.queryOrderedByChild("followed_by/frank").queryEqualToValue(true)
.observeEventType(.Value, withBlock: { snapshot in
for child in snapshot.children {
let userName = child.key as String
print(userName)
}
})
注意,使用用户名作为节点关键的通常是一个坏主意 - 他们应该用他们的UID存储。
另外请注意,我们并没有真正做任何与chat_rooms节点,但维持的关系,具有节点相互引用可观察的变化等有用
编辑:
回应评论,这里的结构,为每一位用户表示他们遵循谁代替谁是跟随用户
users
alovelace
following_user
bill: true
frank: true
in_chat_room: room_42
location: France
这种结构,alovelace是继比尔和坦诚。
要得到所有用户的下列坦率地说:
let usersRef = self.myRootRef.childByAppendingPath("users")
usersRef.queryOrderedByChild("following_user/frank").queryEqualToValue(true)
.observeEventType(.Value, withBlock: { snapshot in
for child in snapshot.children {
let userName = child.key as String
print(userName)
}
})
来源
2016-05-31 17:59:44
Jay
从您的意见,我想你明白我的问题,但我做了一个例子,使其更清楚。 – Acoop
用户lovelace和eclarke之间的关系是什么?即什么使得这两个用户节点重要?加载节点非常简单,但要了解为什么您希望对Firebase的结构至关重要。 – Jay
一个例子是他们是聊天室的两个成员。或者当前用户正在关注他们。 – Acoop