首页 > 解决方案 > 如何获取 Firebase 集合中的所有文档(包括不存在的祖先文档)?

问题描述

我正在尝试提取“用户”集合中的所有文档,但它只提取“fred”和“lisa”,并忽略所有斜体文档:

对于此数据:

在此处输入图像描述

试图获取所有文件:

在此处输入图像描述

将产生:

info: length 2
info: fred  =>  { gender: 'male', contacts: [ '' ] }
      lisa  =>  { contacts: [ '' ] }

根据 Firebase 文档(Firebase:添加和管理数据):

警告:即使不存在的祖先文档出现在控制台中,它们也不会出现在查询和快照中。您必须创建文档以将其包含在查询结果中。

注意:当用户点击触发功能的注册按钮时,不存在的祖先用户似乎是自动创建的firebase.auth()fred并且lisa是手动创建的)。

contacts如果某些用户没有出现在我的查询中,我将如何打印每个用户的?我是否需要定期运行手动重新添加所有用户的脚本,还是有更优雅的解决方案?

标签: databasefirebasegoogle-cloud-firestore

解决方案


正如您所提到的,这些“文档”在 Firebase 控制台中以斜体字体显示:这是因为这些文档仅作为一个或多个子集合的“容器”存在(在控制台中),但它们不是“真正的” "文件。

事实上,如果您直接在col1具有完整路径的集合下创建文档,则doc1/subCol1/subDoc1不会创建中间文档(即没有doc1文档)。

Firebase 控制台以斜体显示这种“容器”(或“占位符”),以便“具体化”层次结构并允许您导航到subDoc1文档,但doc1文档在 Firestore 数据库中不存在。

举个例子:想象一下集合doc1下的一个文档col1

col1/doc1/

和(子)集合subDoc1下的另一个subCol1

col1/doc1/subCol1/subDoc1

实际上,从技术角度来看,它们根本没有相互关联。他们只是分享他们的路径的一部分,但没有别的。这样做的一个副作用是,如果您删除一个文档,它的子集合仍然存在

因此,如果您希望能够查询这些父文档,则必须自己创建它们,正如评论中提到的 jackz314 一样。


推荐阅读