简体   繁体   中英

Flutter - Firebase Firestore document uid does not exists

My db structure is like this:

domain -> user uid -> user data

if I try to add data like this:

await FirebaseFirestore.instance
      .collection(path)
      .doc(firebaseUser.uid)
      .collection(collectionName)
      .add({...});

where path is the user domain, the database shows like this:

消防站

telling me that The document does not exists, it will not appear in queries or shapshots . But if I add the same data by auto id like this:

 await FirebaseFirestore.instance
      .collection(path)
      .add({...});

it works like the second document in picture. Why is this happening?

Look at how the documents in this collection are displayed in an italic font in the Firestore console: This means that these documents are only present as "container" of one or more sub-collection but that they are not "genuine" documents.

As a matter of fact by doing

await FirebaseFirestore.instance
      .collection(path)
      .doc(firebaseUser.uid)
      .collection(collectionName)
      .add({...});

You create a doc in the collectionName (sub)collection but not in the path collection.

On the other hand, with

await FirebaseFirestore.instance
      .collection(path)
      .add({...});

you do create a doc in the path collection.


So if you need to have a document in the path collection AND in the collectionName (sub)collection you need to create these two documents and not only the "child" one.


DETAILED EXPLANATIONS:

Let's take the example of a doc1 document under the col1 collection

col1/doc1/

and another one subDoc1 under the subCol1 (sub-)collection

col1/doc1/subCol1/subDoc1

Actually, from a technical perspective , they are not at all relating to each other. They just share a part of their paths but nothing else.

You can very well create subDoc1 without creating doc1 .

A side effect of this is that if you delete a document, its sub-collection(s) still exist. Again, the subcollection docs are not really linked to the parent document.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM