javascript-Firebase Firestore-查询大集合中的帖子,其中groupId应该与数组中的值匹配

我使用cloudstore .where查询在Firebase上遇到麻烦.
我想查询大量的文档(在我的情况下为帖子),但我只想查询groupId与用户所在的任何组匹配的帖子.原因是我想查询组合的为用户提供所有最新的相关数据(使用orderBy和limit).

我知道我可以使用数组包含的元素,因此可以查询用户所属的所有帖子.

firebase.db.collection('posts').where('members','array-contains',firebase.uid)

如果我决定跟踪组中的成员,这将起作用.问题是,如果我要更改组中的成员,则必须遍历所有帖子并更改成员的数组(这不是很好的做法).最好是让该帖子包含该帖子所属的组的ID.

假设用户一个数组,其中包含他所在的所有组

user.groups = [‘companyGroup’,'{id}’,'{id2}’]

然后,我想查询整个posts集合,并获取其中groupId字段与user.groups中的任何值匹配的所有文档,如下所示:

firebase.db.collection('posts').where('groupId','==',[any of user.groups])

或相反:

firebase.db.collection('posts').where(user.groups,'groupId')

^我还没有尝试过这个,但根据文档,我确信它不起作用

The where() method takes three parameters: a field to filter on,a comparison operation,and a value. The comparison can be <,<=,==,>,>=,or array_contains.

有没有可能做这样的事情?我真的不能一次查询多个位置并将它们组合在一起,因为这违反了能够限制data和orderBy字段的目的.我知道我可以在每个用户下放置一个名为Feed的新集合,并且对于每个帖子都使用一个firebase函数,该函数会推送到相关成员Feed(仅id和LatestActivity),但是一旦该帖子更改(我是将要使用一个名为latestActivity的字段来根据相关性对数据进行排序,而且还要在删除帖子时使用),我需要遍历每个受影响用户下的所有文档,并更改值/删除文档.

任何想法都将不胜感激!

最佳答案
当前,尚无法将ID数组传递给where()函数,并希望获得与每个特定ID对应的所有文档:

firebase.db.collection('posts').where('groupId',[any of user.groups])

您可以选择将ID作为字符串或引用(组文档的路径)存储在数组中.存储引用而不是字符串并没有真正的优势,因此由您来决定使用哪种引用更合适.

获取所有组文档,您应该获取包含这些ID /引用的数组,并为每个数组分别创建一个新的数据库请求.因此,不幸的是,没有其他方法可以使用单个查询一次获取这些组文档.

但是,创建额外的数据库调用并不意味着获取3个文档比获取一个文档要慢3倍.您可以自己进行一些测试.

我引用@Frank van Puffelen的话,“ Firebase在这种情况下具有良好的性能,因为它的历史记录是pipelines the requests.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...