firebase 在Firestore中组织数据的建议

zbdgwd5y  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(182)

对于在Firestore中什么样的数据模型对时间相关的数据有意义,有人有好的想法吗?
我有很多事件数据,我想将它们存储在Firestore中,然后对其进行分析
每个事件都有一个时间戳,我希望对1天的数据、7天的数据、X天的数据、1个月、X个月等数据运行聚合分析
如何在firestore中设置这一点,7天的事件数据已经是大量的数据,我无法将其返回到客户端并在那里进行分析。如果我在firestore中预先聚合了一些预定义的天数,那么它将被锁定为只有这些天,您不能选择任意的天数。我还需要在每次有新数据时不断更新聚合的数据
任何帮助都不胜感激!

aor9mmx1

aor9mmx11#

据我所知,您希望执行类似以下内容的查询:

SELECT hits, COUNT(*)  FROM event_type_api  GROUP BY hits WHERE start_date > TODAY - X

Firestore是一个NoSQL数据库,但这并不意味着您不能知道查询中的文档数。您不能使用SQL术语,但您可以计算它们。读取集合中的所有文档来计算文档数的代价有点高。这就是为什么使用you need to call count()。正如您已经提到的,Firestore中也没有“GROUP BY”。但是,我们几乎可以达到同样的效果。
假设您将创建一个名为“hits”的集合,在该集合中存储具有timestamp类型字段的文档,则可以执行以下查询:

val queryByTimestamp = db.collection("hits").whereGreaterThan("timestamp", TODAY - X)

如果您想知道查询返回了多少个文档,您需要像这样调用count():

val numberOfDocuments = queryByTimestamp.count()

最后一件事与分组有关。如前所述,Firestore不提供任何聚合查询,例如分组。但是,对于此用例有两种解决方案:可以获取hits集合中的所有文档,然后在应用程序代码中按所需的字段对它们进行分组,或者创建一个单独的预分组文档集合来满足您的需要。后者是推荐的方法。记住,duplicating data is a quite common practice when it comes to NoSQL databases

相关问题