蓝色名称为feedPosts,绿色名称为userId,没有颜色的名称为autoId firebase为追加数据而创建,橙色名称为内容:"用户发布字符串在此处&#34 ;
我的问题是我不知道如何获取firebase
autoId,以便我可以显示用户在tableViewController
中发布的内容。我需要将数据附加到userId,以便用户可以发布多个帖子 - 我只是不知道如何在tableViewController
中获取密钥。帮帮我?
答案 0 :(得分:1)
最简单的解决方案是更改您的结构以匹配您尝试获取的数据。这就是你现在拥有的东西
feedPosts
-fbUserId0
-autoIdForThisPost1
content: "users post string is here"
-fbUserId1
-autoIdForThisPost1
content: "users post string is here"
将其更改为此
feedPosts
-autoIdForThisPost0
post_by_uid: "-fbUserId0"
content: "users post string is here"
-autoIdForThisPost1
post_by_uid: "-fbUserId1"
content: "users post string is here"
然后您可以通过-fbUserId1查询所有帖子。这将返回每个将包含内容的帖子节点以及作为autoId的帖子的KEY。
这也是可扩展的,因为您还可以存储例如关于帖子的时间戳,或者甚至可以存储响应的帖子。
另一个优点是使整个结构更平坦(更好更好!在Firebase中非常重要)并且更具查询性。
答案 1 :(得分:0)
如果您的JSON是这样的: -
foodItems{
uid1 :{
autoID1 :{
content : "This is a String"
}
}
}
检索包含 content : "This is a String"
Swift 2.3
let parentRef = FIRDatabase.database().reference().child("foodItems/\(FIRAuth().auth()!.currentUser!.uid)").queryOrderedByChild("content").queryEqualToValue("This is a String")
parentRef.observeSingleEventOfType(.Value, withBlock:{(snap) in
if let snapContainingContent = snap.value as? [String:AnyObject]{
for each in snapContainingContent{
print(each.0)//your autoID
print(each.1)//your content String
if let autoDict = each.1 as? NSDictionary{
print(autoDict["content"]!)
print(autoDict.allKeys(for: "This is a String")[0])
}
}
}
})
Swift 3
let parentRef = FIRDatabase.database().reference().child("Posts/foodItems/uid1").queryOrdered(byChild: "content").queryEqual(toValue: "This is a String")
parentRef.observeSingleEvent(of: .value, with:{(snap) in
if let snapContainingContent = snap.value as? [String:AnyObject]{
for each in snapContainingContent{
print(each.0)//your autoID
print(each.1)//your content String
if let autoDict = each.1 as? NSDictionary{
print(autoDict["content"]!)
print(autoDict.allKeys(for: "This is a String")[0])
}
}
}
})