我在Firebase数据库中有以下结构:
root
- Users
- Posts
- -K_54s1smPPh6qN4znuT
- key1: val
- key2: val
- User:
- -K_54sSomeKeyFromUsersObject: "John Doe"
...
但我无法在文档中找到任何示例,当我有这样的结构时,如何通过Posts
获取所有UserKey
。
我需要有关如何进行查询来比较这样的嵌套数据的帮助吗?
答案 0 :(得分:1)
解决此问题的一种方法是保存对用户帖子的引用。像这样:
linfun
因此,当您想要检索用户的所有帖子时,您只需查看用户个人资料中的引用
答案 1 :(得分:0)
我建议另类
users
uid_0
name: "Frank"
uid_1
name: "Biff"
posts
post_0
msg: "some post"
user_id: "uid_0"
post_1
msg: "Another post"
user_id: "uid_1"
然后一个简单的查询将返回所有uid_0的帖子
let postsRef = root.child("posts")
postsRef.queryOrdered(byChild: "user_id").queryEqual(toValue: "uid_0")
.observeSingleEvent(of: .value, with: { snapshot in
print(snapshot) //prints all of uid_0's posts
})
这避免了收集post id的需要,然后尝试执行类似SQL的查询WHERE Posts.ID in(k1,k2,k3 ...),因为Firebase不直接提供这样的查询。
回复关于如何处理单个帖子有多个用户的后续评论......
posts
post_0
msg: "some post"
users:
uid_0: true
uid_1: true
post_1
msg: "Another post"
users:
uid_1: true
uid_2: true
获取包含uid_1:true的节点的代码类似,称为deep query或深路径。这是一篇较旧的帖子,但会给你很好的信息。
let postsRef = root.child("posts")
postsRef.queryOrdered(byChild: "users/uid_1").queryEqual(toValue: true)
.observeSingleEvent(of: .value, with: { snapshot in
print(snapshot) //prints all of uid_0's posts
})