使用快速代码从Firebase数据库中获取所有uid

时间:2018-10-14 01:28:04

标签: swift firebase-realtime-database

我有这个数据库(请参见上面的图片链接)和一个带有路径的代码,该路径使用以下路径到达目的地:

databaseReference.child("users").child(currentUser!.uid).child("todo-list")

Firebase database structure

在第一个节点“用户”下,下一个级别是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()
    })
}

1 个答案:

答案 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。