【发布时间】:2019-07-10 03:05:01
【问题描述】:
我一直在阅读许多关于特定查询情况的 SO 帖子,但在尝试确定最佳方法而又不会过度处理读取请求时遇到了障碍。
我有一个应用程序,用户可以在其中关注多个艺术家,并且在主页上它应该显示按日期排序的即将提交的内容。我想将阅读次数限制为 15,但我的结构设置方式,我不能限制整体阅读,而只是阅读特定艺术家。让我解释一下:
对于特定用户,我将用户关注的所有艺术家保存到一个数组中:
user: {
userUsername: 'jlewallen18',
userArtistUIDs: [1,4,8,9]
}
为了与用户关注的艺术家的提交建立连接,我将artistUID 添加到提交中:
submission: {
submissionArtistUID: 4,
submissionTitle: 'New Album'
submissionReleaseDate: 1550707200
}
现在,我找到需要在主页上为特定用户显示的内容的方法是遍历所有艺术家 ID 的用户关注者并查询具有该 ID 的提交。然后,我可以使用 rxjs 中的 combineLatest 订阅该 observable 并接收我的结果。
this.submission$ = user.userArtistUIDs.map((id) => {
return this.db.collection$('submissions', ref => ref
.where('submissionArtistUID', '==', id));
});
这很好用,但不能很好地适应我的阅读配额,因为它会查询我关注的每个艺术家的每个版本。因此,如果我关注 300 位艺术家,每个艺术家都有 3 个版本,我将有 900 次读取发送到应用程序,我必须对最终数组进行排序和切片,以在客户端将其减少到 15 个。
这就是我要找的:
使用我的艺术家 ID 列表 -> 查询包含 我的数组中的艺术家 ID -> 按升序排序 -> 限制为 15。
因此我的读取计数只有 15。我知道对于 NoSQL 没有一招一式的小马,但我正在努力找出最佳方法,因为我的应用程序上的读取次数将多于写入次数。
【问题讨论】:
-
我认为 this 可能会对您有所帮助。
-
嘿@AlexMamo 谢谢我今天早些时候看到了你的回答,我有同样的结构!我遇到的根本问题是找出正确的查询,只返回我关注的艺术家的最新提交,而不必返回我关注的所有艺术家的所有文档,然后再对它们进行排序。这有意义吗?
标签: firebase database-design nosql google-cloud-firestore angularfire2