我已经阅读了很多有关特定查询情况的SO帖子,并且在尝试确定最佳方法而又不过度考虑读取请求时遇到了障碍。
我有一个应用程序,用户可以在其中跟踪多个艺术家,并且应在首页上显示按日期排序的即将提交的作品。我想将读取次数限制为15,但是我的结构设置方式不能限制整体读取,而只能读取特定艺术家。让我解释一下:
对于特定用户,我将用户关注的所有艺术家保存到数组中:
user: {
userUsername: 'jlewallen18',
userArtistUIDs: [1,4,8,9]
}
要建立与用户关注的艺术家的作品的联系,我将artistUID
添加到作品中:
submission: {
submissionArtistUID: 4,
submissionTitle: 'New Album'
submissionReleaseDate: 1550707200
}
现在,我找到需要显示在特定用户主页上的内容的方法是,遍历所有演出者ID的用户关注者,并查询具有该ID的提交内容。然后,我可以使用combineLatest
中的rxjs
订阅可观察到的内容,并接收我的结果。
this.submission$ = user.userArtistUIDs.map((id) => {
return this.db.collection$('submissions', ref => ref
.where('submissionArtistUID', '==', id));
});
这很好用,但不能很好地适应我的阅读配额,因为它查询我关注的每个艺术家的每个发行版本。因此,如果我关注300位艺术家,每个艺术家有3个发行版本,那么我将有900次阅读发送到应用程序,并且我必须对最终数组进行排序和切片,以将其减少到客户端15个。
这就是我要寻找的:
使用我的artistID列表->查询包含以下内容的提交 我的数组中的artistID->按升序排序->限制为15。
因此,我的读取次数仅为15。我知道,对于NoSQL来说,这不是一个小技巧,但是我正在努力找出最佳方法,因为在我的应用程序中读取次数将比写入次数更多。>
答案 0 :(得分:0)
在Firestore中,有一个limit()参数可以与查询一起传递,请参见here
这项工作可以吗?
this.submission$ = user.userArtistUIDs.map((id) => {
return this.db.collection$('submissions', ref => ref
.where('submissionArtistUID', '==', id).limit(15));
});