如何使用Firestore查询我关注的用户的最新提交?

时间:2019-02-15 23:27:14

标签: firebase database-design nosql google-cloud-firestore angularfire2

我已经阅读了很多有关特定查询情况的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来说,这不是一个小技巧,但是我正在努力找出最佳方法,因为在我的应用程序中读取次数将比写入次数更多。

1 个答案:

答案 0 :(得分:0)

在Firestore中,有一个limit()参数可以与查询一起传递,请参见here

这项工作可以吗?

this.submission$  = user.userArtistUIDs.map((id) => {
  return this.db.collection$('submissions', ref => ref
    .where('submissionArtistUID', '==', id).limit(15));
});