ios - 如何在 swift 4.0 中获取 firebase-realtime-database 中的特定值

标签 ios swift firebase firebase-realtime-database swift4

我在尝试在 swift 4.0 中获取 firebase-realtime-database 中的特定值时遇到问题

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

let value = 12345678

这是我的 Firebase 数据库的样子

enter image description here

我想找到与我的变量具有相同值的 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/

相关文章:

javascript - 只听云 Firestore 集合的添加?

android - 尝试发送消息以测试 FCM 是否工作但应用程序崩溃

ios - Firebase Analytics 不可用

ios - 从 Xcode 4.2.1 到 4.3 的正确方法?

ios - Xcode iPhone应用程序运行并立即崩溃

swift - tvOS 背景音乐和播放/暂停按钮

ios - MySql 连接中 Unresolved self

iOS 人员选择器获取数组中的联系人电子邮件

iphone - 推特 ios4 ..账户框架

macos - 如何从货币代码中获取 "locale"?