一個例子是他們是聊天室的兩個成員。或者當前用戶正在關注他們。
所以理論上用戶節點
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