Skip to main content

Creating nested documents in firestore


  1. Firestore returning no records yet, I see them in console
  2. Collection not retuning any element.
  3. ... ... 

You might facing issues written above. Then it might be this case.

You might getting empty response in this kind of query though there are elements in firestore.


db.collection(collection1).doc(doc1)
.collection(collection2).doc(doc2)
.collection(collection3).get()
.then(
 function (querySnapshot) {
            querySnapshot.forEach(function (doc) {   
              console.log(doc.id, " = ", doc.data());
 }
)

I face the same problem. Though data was stored sucessfully ( I was guessing, which was wrong actully ).  To verify that your data is not stored as you expceted you can do check this.
Key in italics font means element is deleted
Key in italics font means element is deleted

If key of your data is in italic font then your data is not stored or is marked as deleted [ that was happening in my case ]. See in image.


Now you might thinking, that I have created element and  not deleted it then why it's showing as deleted.

Truth is that if you want to create nested

  • collection ( parent collection )
    • document ( parent docuemnt ) 
    • collection ( child collection ) 
      • document ( child document )

you have to create first parent document and after using its referance you have to create child document.

You should find reson behind this behaviour your self , but for now, perfect way to handle this would be is make sure you code creating documents at every level explicitly.

For example,



var collectoinRef= db.collection(collection1).doc((doc1))
    .collection(collection2).doc(doc2)
    .collection(collection3)

  collectoinRef.doc(doc1)
    .get()
    .then((docSnapshot) => {

      // If document we are going to use as parent document is exist then 
      // we just have to set the child doc inside collectin of that document
      if (docSnapshot.exists) {
         collectoinRef.doc(doc1)
          .collection(collection2)
          .doc({customeid-for-doc}).set(doc)
          .then(() => {
         // Something ....            
          })
     
      // But if document we want to use as parent not exist, Then first we have to 
      // create it.
      // If that document is just used for arragment of elements then just pass empty
      // object set({}) and it will creat empty document for you.
      // After creation of empty parent object you can create collection of child docs 
      // inside it.
     
      } else {
  // Creating empty parent object
         collectoinRef.doc(doc1).set({}).then(() => {
          // creating child object inside parent object
          // after succefull insertion of parent object
          collectoinRef.doc(doc1).collection(collection2)
            .doc({customeid-for-doc}).set(doc)
            .then(() => {
             // Something ....        
            })
        })     
      }
    })

Comments

Popular posts from this blog

Google blogger Ideas panel

Google blogger Ideas  I opened by blogger today, and..   I got this.  Google blogger Ideas  A panel suggesting a topic on which I can write my next blog. It's fetching unanswered question from web according to your previous post and topics. It was something, I was really looking for, after all it takes time to finding subject on which to write next and still being in the same niche.  Awesome feature Blogger! 

Apache : setup basic auth with apache in windows

Authentication is any process by which you verify that someone is who they claim they are. Authorization is any process by which someone is allowed to be where they want to go or to have information that they want to have. I will show here how to set up basic auth on the apache with windows. Pre-requests  Windows VPS Apache server ( That's it ) ( In windows it might be difficult to setup the Apache alone. So instead use something ling xampp , wamp or laragon .) RestClient (  I personally use the postman , but you can use your preferable client)  Windows VPS provider Steps  Enable the necessary modules in the Apache Create the password file Set the auth directives in the virtual host file. Verify basic auth. Enable the  necessary   modules  in the Apache Open the httpd.conf file in the apache's conf folder. httpd.conf file Enable the necessary modules to make the basic auth working. Necessary modules  mod_auth_basic

Firebase - update a spacific fields of single element of object of array in firestore

Firebase - update a spacific fields of single element of object of array in firestore  Its actully advisable to use map instead of array when ever it is possible. But, there are cetain cases where you don't have option to do so.  For example, you are directly saving the response from some outer source without any modification and they send you an array. In this case you will have array to work with. Firestore does not support array here is why  "bad things can happen if you have multiple clients all trying to update or delete array elements at specific indexes. In the past, Cloud Firestore addressed these issues by limiting what you can do with arrays " For more details information you can refer to Kato Richardson post Best Practices: Arrays in Firebase .  Firestore document having array [ used from stackoverflow question ] Suppose you have array of object something like shown in array. Now you want to update endTime field of the object on the index [1]