Their documentation only shows how to set multiple documents with batch, but I need to add new docs and doing it one by one with a loop seems like a bad solution
const addHistroy = async (items: IHistory[]) => { await items.forEach((item) => { addDoc(historyCollectionRef, item); }); };
Advertisement
Answer
You can add a document using Batched Writes by creating a DocumentReference
first as shown below:
const batch = writeBatch(db); await items.forEach((item) => { // Creates a DocRef with random ID const docRef = doc(collection(db, "history_collection_name")); batch.set(docRef, item) }); await batch.commit();
If you don’t want to use Batched Writes and use a loop (which you might have to if you want to add more than 500 documents at once). Try the following:
The map()
does not return a Promise but addDoc()
does. So you must await
the addDoc()
instead. You cannot use async-await
with a forEach
loop so you can either use for-of
loop or use Promise.all()
as shown below:
const addHistroy = async (items: IHistory[]) => { // or alternatively create multiple batched writes of 500 const promises = items.map((item) => addDoc(historyCollectionRef, item)) await Promise.all(promises); console.log("Documents added!") };