基本上,我有一个称为主题的结构,主题包含Title
,Description
和Published
标记(请参阅下面的屏幕截图以进行说明)。
在应用程序中,我想过滤数据,只显示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
})
但这不起作用。我该怎么做呢?在此先感谢您的帮助。
答案 0 :(得分:24)
你有一些小错误。总的来说没什么不好,但结合起来他们永远不会工作:
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)
}
})
我们定期收到这个问题。例如,昨天看起来很相似:Firebase Query not Executing Properly。由于我的解释因每个答案而异,因此我建议您浏览一下我的relevant answers,直至点击为止。
答案 1 :(得分:1)
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)
}
})
答案 2 :(得分:0)
使用此功能,您可以检查是否存在任何数据。
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)
}
}