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].
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
})
})
thanx you very grateful your explanation has helped me, to update an array in firbase and had a while researching and could not get the way .. thank you very much
ReplyDeleteI'm glad, it's helpful to you.
Deletewow awesome thanks!!!!!!
ReplyDeleteHuge Help! Thank you!
ReplyDeleteI'm glad you found this post useful.
Deletethank you so much for you post..
ReplyDeleteVery nice!!! This is really good blog information thanks for sharing.
ReplyDeleteThanks a lot man. I was so stuck with this issue. but it got solved now. Thanks a lot. Appreciate it
ReplyDeleteI'm glad you found it useful smruddha.
Delete