我有这个数据库(请参见上面的图片链接)和一个带有路径的代码,该路径使用以下路径到达目的地:
databaseReference.child("users").child(currentUser!.uid).child("todo-list")
在第一个节点“用户”下,下一个级别是userID的键值,后来又有更多子级别“ todo-list”等。
我想从所有uid 中获取数据。如何进行查询?
代码如下:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
databaseReference = Database.database().reference()
currentUser = Auth.auth().currentUser
let todoListRef = databaseReference.child("users").child(currentUser!.uid).child("todo-list")
todoListRef.observe(DataEventType.value, with: { (DataSnapshot) in
self.itemsToLoad.removeAll()
let enumerator = DataSnapshot.children
while let todoItem = enumerator.nextObject() as? DataSnapshot
{
let item = todoItem.value as AnyObject
self.itemsToLoad.append(item)
}
self.itemsToLoad = self.itemsToLoad.reversed()
self.tableView.reloadData()
})
}
答案 0 :(得分:0)
它与您已有的代码非常相似。您无需观察/users/$uid
,而是观察整个/users
节点。然后在闭包中添加一个额外的循环,以遍历所有用户。
所以:
let usersRef = databaseReference.child("users")
usersRef.observe(DataEventType.value, with: { (usersSnapshot) in
let userEnumerator = usersSnapshot.children
while let user = userEnumerator.nextObject() as? DataSnapshot {
let uid = user.key
let todoEnumerator = user.childSnapshot(forPath: "todo-list").children
while let todoItem = todoEnumerator.nextObject() as? DataSnapshot {
let item = todoItem.value as AnyObject
self.itemsToLoad.append(item)
}
}
})
添加的while
遍历用户,而内部while
遍历每个用户的待办事项。我删除了与表格视图相关的代码,因为您要在其中执行的操作不依赖于Firebase。