Firestore:检查虚拟文档是否存在

Apr*_*pri 3 android kotlin google-cloud-firestore

我正在开发一个 android 应用程序,用户可以在其中注册。为了保存用户数据,我使用 Firebase Firestore。因此,当用户注册时,FirebaseUser.userId会创建一个带有as id的文档。

val exampleObject = ExampleObject(exampleData1, exampleData2)
val firestoreUser = FirebaseAuth.getInstance().currentUser
firebaseFirestore
   .collection("users")
   .document(firestoreUser.uid)
   .collection("exampleCollection")
   .document("exampleDocument")
   .set(exampleObject)
Run Code Online (Sandbox Code Playgroud)

为每个用户创建的文档只包含集合,因此 Firestore 只创建一个“虚拟文档”。那么,如何检查此文档是否存在?

firebaseFirestore
    .collection("users")
    .document(firestoreUser.uid)
    .get()
    .addOnSuccessListener { doc->
        if(doc.exists()) {

        } else {

        }
    }
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它只是一个“虚拟文件”,实际上并不存在

Ale*_*amo 5

Firestore 只会创建一个“虚拟文档”。

它并不会创建任何文件。该文档不存在,因为您根本没有创建它。您所做的只是在一个从未存在过的文档下创建一个子集合。换句话说,您只是为集合中的文档保留了一个 id,然后在其下创建了一个子集合。

需要记住的一件事是,在 Cloud Firestore 中,文档和子集合不像文件系统文件和目录那样工作。如果你在一个文档中创建一个子集合,它并没有暗示任何创建母文件。子集合不以任何方式绑定到父文档。

因此请注意,该位置没有物理文档,但该位置下还有其他数据,即exampleCollection子集合。请记住,您正在谈论的“虚拟文档”只有在您编写至少一个可以在其中保存值的属性时才会成为真正的文档。

所以在你的情况下,以下声明:

if(doc.exists())
Run Code Online (Sandbox Code Playgroud)

将始终评估为false