【问题标题】:Firebase - get posts without which I votedFirebase - 获取没有我投票的帖子
【发布时间】:2020-09-14 19:59:22
【问题描述】:

我有这个数据模型。

/tests/testId

{
   "photos":{
      79075240-f6c3-11ea-9d76-c328c656dbfc:{
         "url":"",
         "votes":0
      },
      7a394290-f6c3-11ea-bd51-5d216a9dfad9:{
         "url":"urlperPhoto"
         "votes":0
      }
   },
   "moderated":false,
   "owner":o8SIEjIByyaNciEgCFH5Kfh4ngh2,
   "active":false,
   "votes":0
}

/tests/testId/votes

{
    photoId: 'xxx',
    birthday: null,
    sex: false,
    votedDate: null
}

我想获得一份我没有投过票的帖子列表。因为我已经在其他收藏中投票,所以我可以为帖子模型添加额外的字段。

示例: votedUsers: [user1, user2, user3] 或 votedUsers: {user1: true, user2: true}

但是...我没有像“不存在”这样的 Firebase 过滤器。如果没有他投票的内容,我如何为用户显示帖子?

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    Firestore 无法进行此类查询,因为不存在的数据没有索引。您只能查询确实存在且已编入索引的数据。这意味着您需要执行一个查询来获取用户未投票的一些可能项,然后将其与另一个查询的结果进行比较,以查看该用户是否 投票,并将其从结果集中删除。是的,这很困难,而且可能很昂贵。但这并不是 Firestore 擅长的问题。

    您可能需要考虑将其他数据与 Firestore 一起使用,以维持用户与他们尚未见过或未做过的事情之间的这种关系。 (它不会像 Firestore 那样扩展。)

    另见:

    【讨论】:

    • 您的链接中的解决方案可能对我的用例不利。我可以检查每个帖子是否在投票字段/集合中,但如果我的查询有限制(例如我想显示 30 个帖子)如果每个帖子都是我已经投票的帖子怎么办?
    • 然后使用分页查询另外 30 个。 firebase.google.com/docs/firestore/query-data/query-cursors
    • 如果我发现没有我在 25 页上投票的帖子(如果会有更多投票 26,27 等),我会得到无用的数据。我将失去用户时间和服务器时间(和成本)。
    • 正如我所说,“是的,这很困难,而且可能很昂贵”。除非您找到另一种方法来开始寻找可以投票的项目,否则您没有任何可行的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    相关资源
    最近更新 更多