我建议的替代
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
})
这样就避免了需要收集然后尝试在(k1,k2,k3 ...)中的WHERE Posts.ID中执行类似SQL的查询,因为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节点:真的是类似的,称为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
})
来源
2017-01-02 18:50:02
Jay
因此,当我从用户对象获得所有密钥时,这意味着我需要提出另一个请求以获取帖子中的所有帖子对吗? – 1110
是的,但是你可以限制帖子的数量。如果用户想要更多的话,获得10篇对帖子的引用和使用一个页面,这是一个很好的解决方案 –
好的,只是最后一个子问题...在firebase中我可以做一个查询,我可以通过我想要返回的密钥列表。 ..就像在SQL WHERE Posts.ID in(k1,k2,k3 ...)? – 1110