如何通过用户邮箱查询Firebase中对应用户发布的所有posts?
你当前的查询语句存在冗余错误,.doc()不传参数会生成一个随机的空文档引用,后续的子集合查询也完全偏离了你的数据范围,需要做如下修改:
如果你的所有帖子都存储在根级posts集合中,每个帖子对应集合内的一个文档,且文档自带email、timestamp字段,直接用下面的查询即可:
const getUserPosts = db .collection('posts') .where('email', '==', user.email) .orderBy('timestamp', 'desc');
额外注意事项:
- 该查询属于组合条件查询,你需要先在Firebase控制台创建对应组合索引:索引字段为
email(升序)+timestamp(降序),否则首次查询会抛出报错,报错信息内会附带一键创建对应索引的跳转入口,点击等待索引创建完成即可正常使用。 - 如果你的实际数据结构为嵌套集合(根
posts集合下每个用户文档内还有独立的子posts集合),要跨所有子集合查询对应用户的帖子,需要改用集合组查询,写法如下:
const getUserPosts = db .collectionGroup('posts') .where('email', '==', user.email) .orderBy('timestamp', 'desc');
内容的提问来源于stack exchange,提问作者icdeverything
相关产品推荐
相关产品推荐

