Swift 获取Firebase数据库的特定数据

Swift 获取Firebase数据库的特定数据,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我不想画出所有的数据。我想为芯片ID绘制某些数据(例如123,2)。chipId将获取引用的数据。 示例:chipId=123,chipId=2 注意:创建表时的芯片ID参考 你好,伯克,欢迎来到StackOverflow。为了在Firebase中检索特定项而不获取所有数据,您需要更改数据库引用。将引用视为JSON树中的一个位置。如果您想要一个特定的项目,您可以在创建它时在引用中描述该位置。例如。如果我有用户,但只需要一个用户的详细信息,我可以这样做: var ref = Databas

我不想画出所有的数据。我想为芯片ID绘制某些数据(例如123,2)。chipId将获取引用的数据。 示例:chipId=123,chipId=2

注意:创建表时的芯片ID参考


你好,伯克,欢迎来到StackOverflow。为了在Firebase中检索特定项而不获取所有数据,您需要更改数据库引用。将引用视为JSON树中的一个位置。如果您想要一个特定的项目,您可以在创建它时在引用中描述该位置。例如。如果我有用户,但只需要一个用户的详细信息,我可以这样做:

    var ref = Database.database().reference()
    ref.observe(.value, with: { (snapshot: DataSnapshot) in

        self.items.removeAll()

        for chipItem: DataSnapshot in snapshot.children.allObjects as! [DataSnapshot]{

            let chipId: String = chipItem.key

            let titles: DataSnapshot = chipItem.childSnapshot(forPath: "titles")




            for device in titles.children.allObjects as! [DataSnapshot]{

                print("Got device: ", device)

                let value: NSDictionary = device.value as! NSDictionary

                let deviceTitle: String = value["title"] as! String
                let deviceId: String = value["id"] as! String

                let deviceState: Bool = chipItem.childSnapshot(forPath: "states/\(deviceId)").value as! Bool

                let newDevice = Device()

                newDevice.title = deviceTitle
                newDevice.chipId = chipId
                newDevice.state = deviceState
                newDevice.id = deviceId

                self.items.append(newDevice)
            }

        }


        self.tableView.reloadData()
也不清楚你上面提到的是什么,但可能是补充

    let userRef = Database.database().reference().child("Users").child(user.uid)
你的推荐信会让你得到你所需要的

编辑:

将获得整个123节点,这样您就可以删除observe闭包中的迭代器,并使用

var ref = Database.database().reference().child("123")
拉入数据的编码示例:

let titles = snapshot.childSnapshot(forPath: "titles")

您能评论一下什么是“ref”吗?你在哪里定义它?我可以帮你更好。你的截图也很模糊。你可以发布一个更好的,我们可以看到更多的树,我们可以帮助你与你的参考我想显示前2或123参考。我在创建表格时更新了photo.ChipId参考。您还可以注意到
.child(“123”).child(“states”).child(“002”)
.child(“123/states/002”)
相同。这样读起来容易多了。回答得非常好。为了让OP.OP更清晰,我添加了一些编辑-您可能应该避免使用数组来存储数据,因为它们在NoSQL数据库中很难使用,并且功能有限。您可能还希望创建具有.childByAutoId的密钥,并将芯片ID存储为具有该密钥的子节点。对于芯片项:快照中的DataSnapshot.children.allObjects as![DataSnapshot]{我需要更改此代码。我需要从数据库中获取的数据:chipItem。因此,我正在提取chipItem中的所有数据。我将仅获取snapshot.children.allObjects中chipItem 2或123以下的数据![DataSnapshot]{}@BerkEylen此let ref=Database.Database().reference().child(“123”)不是正确的引用。该引用应为let ref=Database.Database().reference().child(“akillipriz stechom”).child(“123”)。您需要在子节点的路径中包含父节点akillipriz stechom。请参阅此答案的代码,因为它是准确的。
let titles = snapshot.childSnapshot(forPath: "titles")
private func getData() {
    let ref = Database.database().reference().child("akillipriz-stechome").child("123")
    ref.observeSingleEvent(of: .value, with: {(_ snapshot: DataSnapshot) -> Void in
        for snapshots in snapshot.children.allObjects as! [DataSnapshot] {
            guard let dict = snapshots.value as? [String: AnyObject] else { return }

            if let states = dict["states"] as? [String: AnyObject] {
                print("STATES: \(states)")
            } else {
                print("States Location is Empty or Nil")
            }

            if let titles = dict["titles"] as? [String: AnyObject]  {
                print("TITLES: \(titles)")
            } else {
                print("States Location is Empty or Nil")
            }
        }
    })
}