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

时间:2019-11-07 14:45:28

标签: android kotlin google-cloud-firestore

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

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

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

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

        } else {

        }
    }

这是行不通的,因为它只是一个“虚拟文档”,实际上并不存在

1 个答案:

答案 0 :(得分:3)

  

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

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

要记住的一件事,在Cloud Firestore中,文档和子集合不能像文件系统文件和目录那样工作。如果在文档下创建子集合,则它隐式创建任何父文档。子集合不以任何方式绑定到父文档。

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

因此,在您的情况下,以下语句:

if(doc.exists())

将始终被评估为false