database - 如何获取 Firebase 集合中的所有文档(包括不存在的祖先文档)?
问题描述
我正在尝试提取“用户”集合中的所有文档,但它只提取“fred”和“lisa”,并忽略所有斜体文档:
对于此数据:
试图获取所有文件:
将产生:
info: length 2
info: fred => { gender: 'male', contacts: [ '' ] }
lisa => { contacts: [ '' ] }
根据 Firebase 文档(Firebase:添加和管理数据):
警告:即使不存在的祖先文档出现在控制台中,它们也不会出现在查询和快照中。您必须创建文档以将其包含在查询结果中。
注意:当用户点击触发功能的注册按钮时,不存在的祖先用户似乎是自动创建的firebase.auth()
(fred
并且lisa
是手动创建的)。
contacts
如果某些用户没有出现在我的查询中,我将如何打印每个用户的?我是否需要定期运行手动重新添加所有用户的脚本,还是有更优雅的解决方案?
解决方案
正如您所提到的,这些“文档”在 Firebase 控制台中以斜体字体显示:这是因为这些文档仅作为一个或多个子集合的“容器”存在(在控制台中),但它们不是“真正的” "文件。
事实上,如果您直接在col1
具有完整路径的集合下创建文档,则doc1/subCol1/subDoc1
不会创建中间文档(即没有doc1
文档)。
Firebase 控制台以斜体显示这种“容器”(或“占位符”),以便“具体化”层次结构并允许您导航到subDoc1
文档,但doc1
文档在 Firestore 数据库中不存在。
举个例子:想象一下集合doc1
下的一个文档col1
col1/doc1/
和(子)集合subDoc1
下的另一个subCol1
col1/doc1/subCol1/subDoc1
实际上,从技术角度来看,它们根本没有相互关联。他们只是分享他们的路径的一部分,但没有别的。这样做的一个副作用是,如果您删除一个文档,它的子集合仍然存在。
因此,如果您希望能够查询这些父文档,则必须自己创建它们,正如评论中提到的 jackz314 一样。
推荐阅读
- python - Python jupyter notebook 中的交互式绘图
- java - 通过按下按钮 java swing 添加另一个标签
- http-headers - JFrog Artifactory 间歇性拒绝身份验证,403 被禁止
- java - 如何在接口上测试@ConditionalOnProperty 注释?
- r - 基于部分匹配变量名称的ggplot颜色
- javascript - 使用Javascript将图像移动到不同的div时的CSS过渡
- javascript - TypeError:Razorpay 不是构造函数
- python - 有没有办法在 Python 中仅通过其名称打开应用程序
- javascript - 组件的导入方法而不是绑定函数
- python - 获取子目录中文件的绝对路径