如何在Swift 4.0中的Firebase-Realtime-Database中获取特定值

时间:2018-09-19 07:10:44

标签: ios swift firebase firebase-realtime-database swift4

我在尝试在Swift 4.0的firebase-realtime-database中获取特定值时遇到麻烦

这是我想要获取的值,存储在一个变量中

$phaseData

这是我的Firebase数据库的样子

enter image description here

我想找到与变量具有相同值的trackId,然后获取该trackId

我已经花了整整一个星期的时间来解决这个问题,但似乎无法解决任何帮助。

到目前为止,我的代码在这里

let value = 12345678

1 个答案:

答案 0 :(得分:0)

这是标准的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的“排序和过滤”部分对此进行了介绍

现在,问题陈述了

  

我想找到与变量相同的trackId,   然后获取该trackId

当然,如果您已经知道trackId,就不需要获取它,因为您已经有了它。我的猜测是,您想返回与该轨道ID匹配的节点,以便可以获取其他数据,因此上述代码就是这样做的。如果您有其他疑问,请告诉我。

编辑:OP的后续行动。要配置Firebase,这是视图控制器中的典型设计模式。从那里,您可以使用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()