特定数据获取Firebase数据库

时间:2018-10-22 15:46:06

标签: swift firebase firebase-realtime-database

    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()

我不想绘制所有数据。我想为chipId绘制某些数据(例如123,2)。 chipId将获取引用的数据。 例如:chipId = 123,chipId = 2
注意:创建表时的ChipId参考

enter image description here

1 个答案:

答案 0 :(得分:2)

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

    let userRef = Database.database().reference().child("Users").child(user.uid)

目前尚不清楚您上面的参考文献也指出了什么,但也许可以添加

.child("123").child("states").child("002")

参考文献将为您提供所需的信息。

编辑:

var ref = Database.database().reference().child("123")

将获得整个123节点,因此您可以删除observe闭包内的迭代器,并使用来访问子节点

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")
            }
        }
    })
}

enter image description here