swift - Firestore 数据库 - 文档未在集合中返回
问题描述
在启动我的应用程序时,为当前用户创建一个文档,并使用以下代码将其添加到我的用户集合中:
let userId = Auth.auth().currentUser?.uid
Firestore.firestore()
.collection("users").document(self.userId)
.collection("MyCollection").document("aDocument")
.setData(someData)
数据创建正常 -这是它在 DB 中的样子。4GhpuyGRRhXEAYCllojaaJuwZq02等文件就是上面代码创建的文件。当我在 Firestore 控制台中编辑集合时,手动创建了“丹佛”。
现在我的问题是当我想稍后检索在我的数据库中创建的所有用户时。我愿意:
Firestore.firestore().collection("users").getDocuments { (snapshot) in
print(snapshot?.documents.count) // prints 1
}
此处返回的唯一文档是 denver,它是在数据库中手动输入的文档……不知道我在这里遗漏了什么。(错误的方法调用,身份验证安全......?)
解决方案
您的代码实际上并未使用用户的 UID 创建文档。您的代码在名为 MyCollection 的 UID 下的子集合中创建了一个文档,文档 ID 为“aDocument”。这是唯一创建的文档。您在控制台中看到的 UID 不是实际文档。它们只是“幻影”占位符,有助于在它们下面组织您的子集合。这就是为什么它们以斜体显示的原因(与 denver 相反,它实际上是一个具有实际字段的文档)。请注意,当您单击一个它没有任何字段时 - 那是因为它不是真正的文档。
当您获取 users 下的所有文档时,您将获得的唯一实际文档是 denver,这就是计数为 1 的原因。其他所有内容实际上都不是文档,并且不会影响计数。调用 getDocuments 时不会获取子集合中的文档。Firestore 中的查询很浅——它们不考虑子集合或它们下面的文档。
推荐阅读
- javascript - 带有redux的流程-传递联合类型会出错
- swift - 'bottomLayoutGuide' 在 iOS 11.0 中已弃用:使用 view.safeAreaLayoutGuide.bottomAnchor 而不是 bottomLayoutGuide.topAnchor?
- java - 在mongo中查询一个列表
- visual-studio-code - 在 Rust 中,当断言失败时跳转到调试器
- java - 读取 Java 中的子目录和特定文件
- java - 如何在不重复的情况下生成随机字符串数组 url?
- c# - 如何将存储在共享驱动器中的文件的路径发送到批处理文件参数
- html - XSLT:应用浮动文本以显示外部字典文件中首字母缩写词的完整表达式的最佳方法是什么?
- python - 从云函数访问谷歌云存储桶会引发 500 错误
- flutter - 在构建中无限调用 Flutter 函数