Ios 如何在Swift中过滤Firebase数据?

Ios 如何在Swift中过滤Firebase数据?,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,基本上,我有一个名为topics的结构,其中包含标题、描述和发布标志(请参见下面的屏幕截图以了解说明) 在应用程序中,我想过滤数据,只显示发布了published=true的主题 这就是我想做的: self.ref = FIRDatabase.database().referenceFromURL(FIREBASE_URL).child("topics") self.ref?.queryEqualToValue("published") self.ref?.ob

基本上,我有一个名为topics的结构,其中包含
标题
描述
发布
标志(请参见下面的屏幕截图以了解说明)

在应用程序中,我想过滤数据,只显示发布了
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
        })

但这是行不通的。我应该如何处理这个问题?提前感谢您的帮助。

您有一些小错误。总的来说没什么不好的,但结合起来,它们永远不会起作用:

  • 调用任何
    query…
    方法都会返回一个新对象
  • 您需要
    orderByChild()
    才能筛选其值
  • 你需要对结果进行循环
  • 结合这些:

    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)
        }
    })
    

    我们经常收到这个问题。例如,昨天的这个看起来非常相似:。由于我的解释随每个答案的不同而不同,我建议浏览一点来阅读我的答案,直到它单击为止。

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

    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)
        }
    })
    
    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)
        }
    }
    

    就这样!再次感谢你的帮助,弗兰克!如果数据嵌套得更深一层,是否仍有可能。例如,如果在“published”下有一个包含真/假值的键列表。您想按
    /published/key1=true
    进行筛选这就是我遇到的问题。我尝试了这个方法,但我收到了所有的子值,而不仅仅是传递查询条件的子值。我正在使用.childAdded和queryStarting(在:)。提前感谢您的指点。第1点非常重要。需要声明变量来存储查询,并观察该查询中的数据以获得正确的结果。1.正在调用任何查询。。。方法返回一个新对象是否可以获取与我们使用的相同的记录?我指的是所有标题以“s”开头的记录。请将您的答案始终放在上下文中,而不仅仅是粘贴代码。有关详细信息,请参阅。好的,谢谢!:D