Home > database >  Flutter - Firebase Firestore document uid does not exists
Flutter - Firebase Firestore document uid does not exists

Time:09-30

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:

firestore

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?

CodePudding user response:

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.

  • Related