【问题标题】:Get random doucments from Firestore从 Firestore 获取随机文档
【发布时间】:2022-01-06 14:32:51
【问题描述】:

在我使用 Ionic 和 Firestore 制作的 Web 应用程序中,我想随机选择 5 个商品进行销售 - 这些商品是集合中的文档 collectA 。为此,我已经看到 firebase 不允许以随机方式获取文档,但这篇文章 Firestore: How to get random documents in a collection 中显示了获取它们的可能解决方案。 但我想随机抽取 5 个项目,然后再抽取 5 个尚未被抽取的项目,以此类推。拿完所有物品后,您重新开始。考虑一个新的 collectB 集合,在其中插入 5 个随机获取的项目并将它们从 collectA 集合中删除,这是一个很好的解决方案吗?然后对所有采取的项目执行此操作。当 collectA 变为空且所有项目都在 collectB 中时,执行相同的过程,但从 collectBcollectA。我认为的缺点只是增加了注销成本(每 100,000 美元 0.02 美元)。写入不是因为当我随机抽取 5 个项目时,我仍然需要修改这些文档的某些字段。我不希望查询速度变慢或成本增加很多。

【问题讨论】:

    标签: firebase google-cloud-platform google-cloud-firestore


    【解决方案1】:

    如果您需要为应用程序中的所有用户提供 5 个新的随机项,那么不要在 Firestore 中执行该操作,而是在实时数据库中执行,选择此类随机项要便宜得多。两个数据库在同一个项目中协同工作得很好。话虽如此,您可以拥有如下所示的结构:

    Firebase-root
      |
      --- products
      |     |
      |     --- $productId: true
      |     |
      |     --- $productId: true
      |
      --- consumedProducts
            |
            --- $productId: true
            |
            --- $productId: true
    

    这个问题有两种解决方案。每次从“products”节点获得 5 个新的随机 ID 时,将它们也添加到“consumedProducts”节点。为了能够不再选择相同的 ID,请始终检查“consumedProducts”节点中是否还没有新的 ID。一段时间后,当“consumedProducts”将包含与“products”节点相同的 ID 时,您可以简单地将其删除并重新开始。第二种解决方案可能是将这 5 个元素添加到“consumedProducts”中,然后立即从“products”节点中删除它们。当“products”节点为空时,对“consumedProducts”执行相同的操作。

    现在根据您的应用程序的逻辑,您应该决定使用哪个更好,但请记住,始终保持同步,来自 Firestore 的实际产品在实时数据库中具有相应的 ID。例如,如果您在 Firestore 中添加新产品,请在实时数据库节点中添加相应的 ID。当您从 Firestore 中删除产品时,也会发生这种情况。

    【讨论】:

    • 嗨,亚历克斯,感谢您的回答。因此,我使用 Firestore 数据库,每个创建新项目的用户也会加载该项目的图像和视频。因此,在相关文档中,还有链接到保存在 firebase 云存储中的视频/图像的 url 字段。如果我理解正确,那么,您是否建议同时使用两个数据库,并且当用户创建新元素时,只有 id 会保存在实时数据库中?然后在后者我随机拿文件?
    • 但是,一旦这5项被选中,这些文件就会发生变化(写作成本)。所以我不明白使用2个数据库在成本方面有什么优势?
    • 是的,没错,只将ID保存在实时数据库中。然后获取随机 ID,然后立即创建 Firebase 调用以获取实际文档。使用第二个数据库的优势在于,您无需为执行的读取操作次数付费,而是根据下载的数据量付费。由于您只下载少量数据,因此比使用 Firestore 便宜得多,Firestore 需要为每次读取操作付费。或者,如果您愿意,您仍然可以使用 Firestore,然后将所有 ID 存储在一个文档中。由您决定哪个更适合您的用例。
    • 完美,是的,你是对的,我没有想到这一点。考虑到我只下载 id =) ,我使用实时数据库节省了很多。我会沿着这条路走,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2018-03-29
    • 2021-11-02
    • 2020-07-29
    • 1970-01-01
    相关资源
    最近更新 更多