结构Firebase数据

时间:2016-01-30 20:39:57

标签: firebase firebase-realtime-database nosql

如何在firebase中构建我的数据以检索当前用户尚未评论的所有帖子。我是nosql的新手,我似乎无法摆脱构建它的SQL方式。

这是我的尝试:

Posts: {
 someUniqueId: {
   user: userid,
   content: "blah"
 }
}

Comments: {
 someCommentUniqueId: {
  comment: "ola",
  post: someUniqueId,
  user: userid
 }
}

现在如果以上是正确的,我完全不知道如何查询。甚至可以在NOSQL中使用吗?

2 个答案:

答案 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是否是该帖子的子项。如果数据集很大,显然要避免这种情况。