首页 > 解决方案 > 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,它是在数据库中手动输入的文档……不知道我在这里遗漏了什么。(错误的方法调用,身份验证安全......?)

标签: swiftfirebasegoogle-cloud-firestore

解决方案


您的代码实际上并未使用用户的 UID 创建文档。您的代码在名为 MyCollection 的 UID 下的子集合中创建了一个文档,文档 ID 为“aDocument”。这是唯一创建的文档。您在控制台中看到的 UID 不是实际文档。它们只是“幻影”占位符,有助于在它们下面组织您的子集合。这就是为什么它们以斜体显示的原因(与 denver 相反,它实际上是一个具有实际字段的文档)。请注意,当您单击一个它没有任何字段时 - 那是因为它不是真正的文档。

当您获取 users 下的所有文档时,您将获得的唯一实际文档是 denver,这就是计数为 1 的原因。其他所有内容实际上都不是文档,并且不会影响计数。调用 getDocuments 时不会获取子集合中的文档。Firestore 中的查询很浅——它们不考虑子集合或它们下面的文档。


推荐阅读