c0d*_*d3r 3 sql node.js firebase google-cloud-firestore
{
"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"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想检索按创建时间按限制 2(每个 api 调用 2 个帖子)排序的“userid_1”以下用户的帖子。
如何在节点中实现fire-store查询?
如果关注用户少于 100 并且他们有 10 个帖子,则可以获取所有以下用户的帖子并按创建时间对帖子进行排序。
如果一个用户有 1000 个关注者,而这 1000 个人有 100 个帖子,则无法获取所有后续用户的帖子并按创建时间排序。
我希望我们可以通过 SQL "JOIN" 查询轻松实现这一点
如何在节点中的 fire-store 中实现此实现查询?
Fra*_*len 10
Firestore 没有服务器端 JOIN 的概念。单个读取操作中的所有文档必须来自同一个集合。
这意味着要从多个集合中获取数据,您将需要执行多个读取操作——每个集合至少一个,但可能更多。这在大多数 NoSQL 数据库中是正常的,并且没有许多开发人员认为应该从客户端应用程序读取的数据量那么慢。
如果您需要读取的文档数量对于您的应用程序来说是过高的,请考虑更改您的数据模型以减少读取次数。通常,这意味着您最终会将某些数据复制为更易于阅读的格式。
例如,在您的用例中,您似乎拥有一个社交网络。一个常见的解决方案是为每个用户存储完整的提要,所以他们关注的人的所有帖子,作为数据库中的一个单独集合。
因此,当用户撰写帖子时,您将该帖子写入主posts集合,以及feed关注他们的每个用户的集合。此操作称为扇出数据,虽然它使写入操作复杂化并复制数据,但它使读取数据的代码更简单,更具可扩展性。由于在许多应用程序中,读操作比写操作更常见,因此许多 NoSQL 数据建模者认为这是一种有效的权衡。
这个话题非常广泛,很难在一个单一的答案中做到公正,这就是为什么我也推荐你:
| 归档时间: |
|
| 查看次数: |
3184 次 |
| 最近记录: |