我在尝试在Swift 4.0的firebase-realtime-database中获取特定值时遇到麻烦
这是我想要获取的值,存储在一个变量中
$phaseData
这是我的Firebase数据库的样子
我想找到与变量具有相同值的trackId,然后获取该trackId
我已经花了整整一个星期的时间来解决这个问题,但似乎无法解决任何帮助。
到目前为止,我的代码在这里
let value = 12345678
答案 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()