我在尝试在 swift 4.0 中获取 firebase-realtime-database 中的特定值时遇到问题
这是我想要获取的存储在变量中的值
let value = 12345678
这是我的 Firebase 数据库的样子
我想找到与我的变量具有相同值的 trackId,然后获取该 trackId
我花了整整一个星期的时间来解决这个问题,我似乎无法解决它,非常感谢任何帮助。
这是我到目前为止的代码
let questionPostsRef = self.ref.child("questionPosts")
let query = questionPostsRef.queryOrdered(byChild: "trackId").queryEqual(toValue: "12345678")
query.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children {
let childSnap = child as! DataSnapshot
let dict = childSnap.value as! [String: Any]
let cat = dict["category"] as! String
let name = dict["name"] as! String
print(childSnap.key, cat, name)
}
})
最佳答案
这是标准 Firebase 查询。
要检索包含具有特定值的子节点的节点,我们在节点中查询相关节点键并指定要查找的值。它们将在快照中返回,并且它们可以多个,因此我们需要迭代每个返回的快照。
let questionPostsRef = self.ref.child("questionPosts")
let query = questionPostsRef.queryOrdered(byChild: "trackId").queryEqual(toValue: "12345678")
query.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children {
let childSnap = child as! DataSnapshot
let dict = childSnap.value as! [String: Any]
let cat = dict["category"] as! String
let name = dict["name"] as! String
print(childSnap.key, cat, name)
}
})
输出为(假设找到两个)
-Lu9ma9jsd... some category some name
-K999a90k9... some category some name
Firebase 指南中对此进行了介绍:“排序和过滤”部分中的 Work With Lists Of Data
现在,问题说明
And I want find the trackId that has the same value as my variable and then get that trackId
当然,如果您已经知道 trackId,则无需获取它,因为您已经拥有它。我的猜测是您想要返回与该轨道 ID 匹配的节点,以便您可以获取其他数据,这就是上面代码的作用。如果您有不同的问题,请告诉我。
编辑:OP的后续行动。要配置 Firebase,这是 View Controller 中的典型设计模式。从那里,您可以在整个类(class)中使用 self.ref 引用您的 Firebase(如我上面的回答所示)
import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase
import FirebaseStorage
class ViewController: UIViewController {
var ref: DatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
self.ref = Database.database().reference()
关于ios - 如何在 swift 4.0 中获取 firebase-realtime-database 中的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52400103/