如何通过键值从firebase中检索对象

Posted

技术标签:

【中文标题】如何通过键值从firebase中检索对象【英文标题】:How to retrieve objects from firebase by key value 【发布时间】:2016-06-05 07:43:11 【问题描述】:

我是 firebase 新手,我的 firebase 项目有这样的结构

我想获取所有对象,“Interested”值等于“men”

我写了这样的代码,让所有对象按兴趣值排序:

let thisUserRef = URL_BASE.childByAppendingPath("profile")

thisUserRef.queryOrderedByChild("Interest")
     .observeEventType(.Value, withBlock:  snapshot in

     if let UserInterest = snapshot.value!["Interest"] as? String     
          print (snapshot.key)  
     

但我收到零。

【问题讨论】:

【参考方案1】:

您需要遍历所有键值配置文件

      if let allProfiles = snapshot.value as? [String:AnyObject] 
            for (_,profile) in allProfiles 
                  print(profile);
                  let userInterest = profile["Interest"]
           
       

这里 _ 是格式为 KYXA-random string 的键,而 profile 将是该键的元素。

编辑

根据docs 查询子值。

尝试thisUserRef.queryOrderedByChild("Interest").equalTo("men"),然后使用我在答案中指定的内部循环

【讨论】:

好的,谢谢!但实际上我需要接收满足我的条件 userInterest == "men" 的对象。我试图写 if 语句和 print(profile) 但我得到了 nil 这个答案不起作用。 Snapshot.value 不是字符串,而是字典。此外,OP 想要所有 Interest = men 的用户节点。此外,如果有 10,000 个节点,这可能会使设备的内存不堪重负。最好只通过查询检索感兴趣的节点。 如果你使用普通的.Valueretrieve,它实际上将是一个字符串对象字典——我已经测试过了。虽然您的回答确实解释了查询哪个是正确的。 我的立场是正确的!该代码确实有效,并且可能提供解决方案。这不是“最好”的过程,但知道这一点当然很好! 附带说明,通过以这种方式读取数据,它们被读入字典,字典是无序的,因此您将失去顺序(Firebase 通过 Key 自然排序)。它应该在 snapshot.children 中使用 child 进行迭代【参考方案2】:

这是 Firebase 中的基本查询。 (针对 Swift 3、Firebase 4 更新)

    let profileRef = self.ref.child("profile")
    profileRef.queryOrdered(byChild: "Interest").queryEqual(toValue: "men")
    profileRef.observeSingleEvent(of: .value, with:  snapshot in

        for child in snapshot.children 
            let dict = child as! [String: Any]
            let name = dict["Name"] as! String
            print(name)
        
    )

Firebase 的旧文档确实概述了如何处理查询:在此处查找

Legacy Firebase Queries

新的文档很薄。

哦,只是指出变量; thisUserNode 可能应该是 profileRef,因为这就是您实际查询的内容。

【讨论】:

我对此有疑问!这段代码有效,如果我想删除这个 child.value["Name],我该怎么做?

以上是关于如何通过键值从firebase中检索对象的主要内容,如果未能解决你的问题,请参考以下文章

从 ArrayList 中的 Firebase 检索数据以获取图形

Firebase/Android:将检索到的值从 Firebase 添加到 arraylist 会返回空指针异常

通过知道对象的值从对象中检索键[重复]

如何将firebase快照值从一个函数提取到另一个函数变量?

如何使用顺序 ID 从 Firebase 检索随机对象?

如何使用 Swift 中的 url 从 firebase 正确检索数据?