firebase 如何在Firestore中计算多个文档中的相似子集合总数

xdnvmnnf  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(89)

我有一个Firestore用户数据库,每个人的数据都存储在自己的文档中(而不是像传统的RDBMS那样与顶级集合相关)。现在我想计算所有用户的全局数据,似乎我必须遍历用户并计算每个子集合,然后手动相加。是否有一些文档可以在一个查询中执行此操作,例如:在query builder中?
例如,该结构是这样的,其中所有用户文档共享公共结构,但是根据用户活动具有不同的集合长度:

/users/USERID1/sessions/
    - SESSION1/
    - SESSION2/
/users/USERID2/sessions/
    - SESSION1/
/users/USERID3/sessions/
    - SESSION1/
    - SESSION2/
    - SESSION3/
    - SESSION4/
/users/USERID4/sessions/
    - SESSION1/
    - SESSION1/
    - SESSION2/

我知道我可以使用新的count()函数来做类似collection('/users/USERID1/sessions/').count().get()的事情,但是我必须为USERID 1,USERID 2,USERID 3等运行这个函数。
那么,有没有一种方法可以对所有用户文档(如'/users/*/sessions/')进行跨部门聚合呢?

wi3ka0sx

wi3ka0sx1#

这似乎可以通过收集组来完成
https://firebase.google.com/docs/firestore/query-data/queries#collection-group-query
例如const querySnapshot = await db.collectionGroup('landmarks').where('type', '==', 'museum').get();
所以我应该可以

const count = await db.collectionGroup('session').count().get();

此外,计算不同类型的会话

const count = await db.collectionGroup('session').where('type', '==', 'web').count().get();

Firebase控制面板中的查询构建器也支持这一点,在“查询范围”选项卡下,它似乎有一个我的数据库中所有集合的列表。
这里我唯一担心的是,它可能包括整个数据库中任何文档的所有“sessions”集合,而不仅仅是“user/*/sessions”。我不认为我有任何其他命名的方式,但一般来说,这可能是一个陷阱,其他更一般命名的集合,可能出现在不同的文档上下文中。

相关问题