如何在firebase中构建我的数据以检索当前用户尚未评论的所有帖子。我是nosql的新手,我似乎无法摆脱构建它的SQL方式。
这是我的尝试:
Posts: {
someUniqueId: {
user: userid,
content: "blah"
}
}
Comments: {
someCommentUniqueId: {
comment: "ola",
post: someUniqueId,
user: userid
}
}
现在如果以上是正确的,我完全不知道如何查询。甚至可以在NOSQL中使用吗?
答案 0 :(得分:2)
Firebase没有查询缺少值的机制。见is it possible query data that are not equal to the specified condition?
在NoSQL中,您经常会为您需要的查询建模数据。因此,如果您想知道每个用户仍可以评论哪些帖子,请在JSON树中对该信息进行建模:
CommentablePosts_per_User
$uid
$postid: true
这种类型的结构通常称为索引,因为它允许您有效地查找给定用户的相关$postid
值。从数据中提取这些索引的过程通常称为非规范化。有关此技术的(稍微更旧)概述,请参阅此Firebase blog post on denormalization。
我推荐这篇文章为好introduction to NoSQL data modeling。
答案 1 :(得分:0)
如果我可以提出几个选择:
Posts:
someUniquePostId:
user_id_0: false
user_id_1: true
comment: "dude, awesome post"
user_id_2: false
user_id_3: true
comment: "wicked!"
驱动器空间很便宜,因此在帖子中存储所有用户ID可以让您轻松选择user_id_0未通过查询为user_id_0评论哪些帖子:false。
或者你可以翻转逻辑
Posts:
post_id_0:
user_id_1: "dude, awesome post"
user_id_3: "wicked"
post_id_1:
user_id_0: "meh"
user_id_2: "sup?"
Users:
user_id_0:
no_posts:
post_id_0: true
user_id_1:
no_posts:
post_id_1: true
这将使您能够查询每个用户尚未发布的帖子:在这种情况下,user_id_0尚未发布到post_id_0而user_id_1尚未发布到post_id_1
当然,根据具体情况,您还可以依靠客户端逻辑来获取所需的数据。例如,如果您只关心用户昨天没有发表评论的帖子,您可以阅读昨天的.value查询它们并在代码中进行比较,看看他们的user_id是否是该帖子的子项。如果数据集很大,显然要避免这种情况。