I have a Firestore array called ActivityLogList[]. There will be other users editing their objects concurrently in this Array (each user will have their own object). What I am attempting is to add/edit this object without modifying the other users objects. Previously I have downloaded the complete array and then editing my object and then updateDoc.
Firebase console
each of these ActivityLogList objects has there own this.auth.currentUser?.uid which is why I do not want to grab to whole ActivityLogList Array and add/edit as per the code below
ts
addToArray(array: any, object: any, eventid: any) {
// array = ActivityLogList collection
// object = object iserted into ActivityLogList collection
array.push(object); // add the object to the array
const ref = doc(this.firestore, `events/${eventid}`);
// ref = events in start collection
return updateDoc(ref, { ActivityLogList: array });
}
The trouble with this is I could overwrite other users objects if they are editing their objects at the same time as myself. Is there a way I add/edit into the Array without grabbing the whole ActivityLogListArray?
You can add an item to an array field with an arrayUnion
and remove specific items from an array with arrayRemove
. Both of these are possible without reading the entire array.
But there is no way to edit an item in an array without reading the entire array. The only way to edit an item is to:
If you want to prevent reading/writing the entire array, consider if you should store the ActivityLogList
a a subcollection rather than an array field. While that will require you to read/write more documents, it allows you to manipulate each document separate.