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
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 ]
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].

There is no direct way to update it. You might get some solution like this on internet.

 db.collection(something).doc(something)            
              .collection(something").doc(something)
              .update({
                "data.[1].startTime": [ value]  
              })

 db.collection(something).doc(something)            
              .collection(something").doc(something)
              .update({
                "data.${1}.startTime": [ value]
              })

But none of this is working actully [ at least not for me].


The only way to perform update on existin array element is to fetch complete array upate the desired element and update complete array.


// First data of the desired document
  db.collection(something).doc(something)
          .collection(something).doc(something)
          .get().then((doc) => {

            // Assign array to local javascript variable
            var objects = doc.data().dates
      
            // Assing desired element of object to local javascript variable 
            var objectToupdate = objects [1]

            // Update field of the element assigned to local javascript variable
            objectToupdate.startDate = [new Date]

            // reassign object to local array variable
            objects [1] = objectToupdate 

          // Update complete array with update copy of element we have 
          // created in local javascript variable.
          db.collection(something).doc(something)
          .collection(something).doc(something)
              .update({
                dates: dates
              })
   })

Comments

Popular Posts