【问题标题】:How to filter Firebase data in Swift?如何在 Swift 中过滤 Firebase 数据?
【发布时间】:2017-01-31 13:04:52
【问题描述】:

基本上,我有一个名为 topic 的结构,其中包含 TitleDescriptionPublished 标志(请参阅下面的屏幕截图以进行说明)。

在应用程序中,我想过滤数据,只显示有published = true的主题。

这就是我想要做的:

self.ref = FIRDatabase.database().referenceFromURL(FIREBASE_URL).child("topics")
        self.ref?.queryEqualToValue("published")
        self.ref?.observeEventType(.Value, withBlock: { (snapshot) in
            //...Handle Snapshot here
        })

但这不起作用。我应该如何处理这个?提前感谢您的帮助。

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:

    通过使用此功能,您可以检查任何存在或不存在的数据。

    func checkUserExsistance(_ firURL : String ,_ childNode : String,_ value : String,_ ChildKey : String, completion : @escaping(Bool)->()){
    
         let DBRef = Database.database().reference(fromURL: firURL)
    
        let newDB =   DBRef.child(childNode).queryOrdered(byChild: ChildKey).queryEqual(toValue: value)
        newDB.observe(.value, with: { (snapPhot) in
            print(snapPhot.value)
    
        }) { (erooor) in
            print(erooor)
        }
    }
    

    【讨论】:

    • 请始终将您的答案放在上下文中,而不仅仅是粘贴代码。有关详细信息,请参阅here
    • 好的,谢谢! :D
    【解决方案2】:

    你有一些小错误。总的来说没有什么太糟糕的,但结合起来他们永远不会工作:

    1. 调用任何query... 方法都会返回一个新对象
    2. 您需要先orderByChild() 才能过滤其值
    3. 您需要遍历结果

    结合这些:

    let ref = FIRDatabase.database().referenceFromURL(FIREBASE_URL).child("topics")
    let query = ref.queryOrderedByChild("published").queryEqualToValue(true)
    query.observeEventType(.Value, withBlock: { (snapshot) in
        for childSnapshot in snapshot.children {
            print(childSnapshot)
        }
    })
    

    我们经常收到这个问题。例如,昨天的这个看起来非常相似:Firebase Query not Executing Properly。由于我的解释因每个答案而异,我建议浏览一下以阅读我的relevant answers,直到它点击为止。

    【讨论】:

    • 就是这样!再次感谢弗兰克的帮助!
    • 如果数据嵌套更深一层是否仍然可能。例如,如果在“已发布”下有一个具有真/假值的键列表。你想通过/published/key1 = true 过滤这是我遇到的问题。
    • 我试过了,但我收到了所有子值,而不仅仅是通过查询条件的唯一值。我正在使用 .childAdded 和 queryStarting(at:)。提前感谢您的任何指点。
    • 第 1 点非常重要。需要声明变量来存储查询并观察来自该查询的数据以获得正确的结果。 1.调用任何查询...方法返回一个新对象
    • 是否可以像我们使用的一样获取记录?我的意思是所有标题以“s”开头的记录。
    【解决方案3】:
    self.ref = FIRDatabase.database().referenceFromURL(FIREBASE_URL).child("topics").
        queryOrderedByChild("published").queryEqualToValue(true)
        .observeEventType(.Value, withBlock: { (snapshot) in
        for childSnapshot in snapshot.children {
            print(snapshot)
        }
    })
    

    【讨论】:

      猜你喜欢
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 2018-11-17
      • 1970-01-01
      • 2021-11-09
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多