{
"users":{
"userid_1":{
"following":{
"userid_2":{
"name":"user2"
},
"userid_3":{
"name":"user3"
}
}
},
"posts":{
"postid1":{
"createdTime":"111",
"postedBy":"userid_2"
},
"postid2":{
"createdTime":"112",
"postedBy":"userid_3"
},
"postid3":{
"createdTime":"113",
"postedBy":"userid_2"
},
"postid4":{
"createdTime":"114",
"postedBy":"userid_1"
}
}
}
}我希望检索“userid_1”的以下用户的帖子,这些用户按创建的时间按限制2(每个api调用2个帖子)排序。
如何在节点中实现火灾存储查询?
如果跟随的用户少于100,并且他们有10个帖子,那么获取以下用户的所有帖子并按创建的时间对帖子进行排序是可以的。
如果一个用户有1000个跟随者,而1000个人有100个帖子,那么获取下面所有用户的帖子并按照创建的时间进行排序是不可能的。
我希望我们可以通过SQL "JOIN“查询轻松地实现这一点。
如何在节点中的消防存储中实现此实现查询?
发布于 2019-06-19 11:36:58
Firestore没有服务器端连接的概念。单个读取操作中的所有文档必须来自同一个集合。
这意味着要从多个集合获取数据,您需要执行多个读取操作--至少每个集合一个,但可能更多。在大多数NoSQL数据库中,这是正常的,而且并不像许多开发人员认为的那样慢,因为您应该从客户端应用程序中读取大量的数据。
如果您需要读取的文档数量对您的应用程序来说令人望而却步,请考虑更改您的数据模型以减少读取。通常情况下,这意味着您最终会将一些数据复制成一种更易于阅读的格式。
例如,在用例中,您似乎有一个社交网络。一个常见的解决方案是为每个用户存储完整的提要,因此他们所跟踪的人员的所有帖子都作为一个单独的集合存储在数据库中。
因此,当用户写入一个帖子时,您可以将该帖子写到主posts集合,也可以写到跟随它们的每个用户的feed集合。这个操作被称为扇出您的数据,虽然它使写操作复杂化并复制数据,但它使读取数据的代码更简单、更可伸缩。由于在许多应用程序中读操作比写操作更常见,许多NoSQL数据建模师认为这是一种有效的权衡。
这个话题非常广泛,很难用一个单一的答案来解释,这就是为什么我还建议你:
https://stackoverflow.com/questions/56661462
复制相似问题