我已经向firebase添加了帖子,我想知道如何根据用户发布的时间按时间顺序提取帖子。
评论后的第一个节点是用户ID,然后帖子位于其下方。显然,这些帖子是有序的,但是如果一个新用户发布了一些内容,那就是发布"和另外1"例如,我如何拉它,以便它介于两者之间。
有没有办法删除autoID并只使用userID作为密钥?我遇到的问题是之前的帖子被覆盖了。
我接受答案,因为它是最彻底的。我为解决我的问题所做的只是创建唯一键作为第一个节点,然后将UID用作子项,将注释用作子项。然后我按顺序拉出唯一键,找到与uid相关的注释。
答案 0 :(得分:0)
您不能将userID用作键值而不是autoID,因为键必须是唯一的,这就是为什么Firebase只更新值而不添加另一个具有相同键的值。通常情况下,默认情况下Firebase节点按时间顺序排序,因此如果您提取值,则这些节点应按正确顺序排列。但是,如果您想确定这一点,可以添加时间戳值并设置服务器时间戳。在提取数据之后,您可以通过该时间戳订购它(我认为实际上有一个时间戳由firebase自动保存,您可以以某种方式访问它,但您需要在文档中查找)。如果我做对了,为了完成你想要的,你需要改变数据库的结构。例如,您可以使用autoID,但如果需要,可以将想要用作键的用户ID保存为值。希望我的想法是正确的,如果不是更精确,我会尽力帮助。
答案 1 :(得分:0)
Firebase密钥默认情况下按时间顺序 - 它内置于密钥生成算法中。我认为您需要重新构建/重新考虑您的数据。
您的 POSTS 数据库应该(可能)在每个帖子中列出评论,然后如果需要,您可以复制用户记录,以便在需要用户访问时更快地进行检索。如下所示:
POSTS
- post (unique key)
- title (text)
- date (timestamp)
- comments
- comment (unique key)
- text (text)
- user_id (user key)
- date (timestamp)
当你提取评论时,你不应该从一堆不同的用户中提取它们。这可能会导致很多查询和吨的加载时间。相反,评论可以(按时间顺序)添加到帖子对象本身,如果你想在那里保留引用,也可以添加到用户。与MySQL不同,NoSQL数据库可以有相当多的数据重复。
答案 2 :(得分:0)
其他答案都有其他优点,但更完整的解决方案包括对帖子加时间戳和denormalizing your data,以便可以查询(假设在某些时候会查询)。在Firebase中,奉承更好。
gl.bufferData(gl.ARRAY_BUFFER, genericPolygonArrayBufferView.buffer, gl.STATIC_DRAW);
通过这种结构,我们可以
posts
post_0
title: "Posts And Posting"
msg: "I think there should be more posts about posting"
by_uid: "uid_0"
timestamp: "20171030105500"
inv_timestamp: "-20171030105500"
uid_time: "uid_0_ 20171030105500"
uid_inv_time: "uid_0_-20171030105500"
comments:
comment_0
for_post: "post_0"
text: "Yeah, posts about posting are informative"
by_uid: "uid_1"
timestamp: "20171030105700"
inv_timestamp: "-20171030105700"
uid_time: "uid_1_20171030105700"
uid_inv_time: "uid_1_-20171030105700"
comment_1
for_post: "post_0"
text: "Noooo mooooore posts, please"
by_uid: "uid_2"
timestamp: "20171030110300"
inv_timestamp: "-20171030110300"
uid_time: "uid_2_20171030110300"
uid_inv_time: "uid_2_-20171030110300"
我在其中抛出了一些其他键:值对来将其四舍五入:复合值,查询升序和降序,时间戳。