首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Firestore中获取随机加成

从Firestore中获取随机加成
EN

Stack Overflow用户
提问于 2021-11-29 18:45:45
回答 1查看 62关注 0票数 0

在我用Ionic和Firestore制作的web应用程序中,我想选择5个随机项目来出售--这些项目是集合collectA中的文档。为了做到这一点,我已经看到firebase不允许以随机的方式获取文档,但是在本文Firestore: How to get random documents in a collection中给出了一个可能的解决方案。但我想要5个随机项目,然后另有5个尚未被拿走,以此类推。当所有的物品都被拿走了,你就重新开始。考虑一个新的collectB集合,在其中插入随机获取的5个项并从collectA集合中删除它们,会是一个好的解决方案吗?那就把所有的东西都拿走了。当collectA变为空且所有项都在collectB中时,执行相同的过程,但从collectB到collectA。我认为不利之处仅在于核销成本的增加(每100,000美元0.02美元)。写入并不是因为当我接受这5个随机项时,我仍然需要修改这些文档的一些字段。我不希望查询速度减慢,也不希望成本增加很多。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-30 07:18:06

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

代码语言:javascript
复制
Firebase-root
  |
  --- products
  |     |
  |     --- $productId: true
  |     |
  |     --- $productId: true
  |
  --- consumedProducts
        |
        --- $productId: true
        |
        --- $productId: true

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70159836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档