我想显示Firebase的一些数据。我有一个节点,其中有一堆名为posts的帖子。
Database.database().reference().child("main").child("posts")
使用上述代码,我可以打印出posts节点中的所有文章。但是,我不想打印所有帖子,而是要打印一些帖子。 我想根据帖子ID打印一些帖子,如何打印多个帖子?
编辑
var postingID: String?
var posts = NSMutableArray()
func loadDetails(){
Database.database().reference().child("main").child("users").child(screenName!).child("bookmarks").observeSingleEvent(of: .value, with: { (snapshot:DataSnapshot) in
if let postsDictionary = snapshot .value as? [String: AnyObject] {
for testingkey in postsDictionary.keys {
Database.database().reference().child("main").child("posts").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.exists() {
for child in snapshot.children {
let snap = child as! DataSnapshot
if snap.hasChildren() {
if let id = snap.childSnapshot(forPath: "id").value as? String, id == testingkey {
print(snap.value!)
self.posts.insert(snap.value!, at: 0)
}
}
}
}
})
}
}})
}
答案 0 :(得分:2)
编辑
您一直在这里设置相同的字符串
self.postingID = testingkey
因此它等于for循环中的最后一个元素。因此,在您的if条件下
id == self.postingID
仅适用于最后一个节点
也许您想在数组中更改self.postingID(如果ID尚未唯一,则更改为Set),并具有以下内容:
var self.postingIdArray = [String]()
然后在您的第一个函数中,您要将每个键附加到此数组中
for testingkey in postsDictionary.keys {
self.postingID = testingkey
}
最终,您想检查节点的ID是否在数组中,例如
if let id = snap.childSnapshot(forPath: "id").value as? String, self.postingIdArray.contains(id) { self.posts.insert(snap, at: 0) }
旧答案
let databaseRef = Database.database().reference().child("main")
let query = databaseRef.queryOrderedByKey()
query.observeSingleEvent(of: .value) { (snapshot) in
if snapshot.exists() {
for child in snapshot.children {
let snap = child as! DataSnapshot
if snap.hasChildren() {
if let id = snap.childSnapshot(forPath: "postId").value as? String, id == idToCompare {
print(id)
}
}
}
}
}