How can I add data to a firestore array without overwriting it's previous content?

Viewed 299

I'm trying to store book Ids in the books array in firestore. every time I add a new book it overwrites the first one.

await updateDoc(
  doc(dataBase, "users", user.uid),
  {
    currentlyReading: {
      arrayUnion(bookId)
    }
  },
  { merge: true }
);

I'm using updateDoc as stated in the documentation + merge: true, but it only stores one element. is there any way I can keep adding elements without overwriting? Thank you in advance.

this is a screen shot of the Document enter image description here

1 Answers

The { merge: true } prevents from existing fields from being removed when using setDoc() and doesn't work for array elements. There's no need for that option when using updateDoc(). One way would be to use arrayUnion() add new elements to the array.

import { doc, updateDoc, arrayUnion } from "firebase/firestore"

await updateDoc(doc(dataBase, "users", (user.uid)), {
  currentlyReading:{
    books: arrayUnion(bookId)
  }            
})
Related