Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

324
Views
How to add a collection of documents to a newly created document in firebase?

I have built a messaging app using react and firebase. When a user creates a new group chat, a new document a new chat id (made randomly by Firebase) is created, with the date that the chat was created. The participants of the group chat are added to a new 'participants' collection which is added to the new chat document afterwards. Here is my code:

   db.collection('chats').add({ //add generates new chat document and id
            created: firebase.firestore.FieldValue.serverTimestamp() // when new chat was created
        })
            .then((docRef) => { //docRef.id contains newly created chat Id
                console.log("docRef is" + docRef.id) // this works, and new chatId is created
                    db.collection("chats")
                    .doc(docRef.id) //this isn't working, firebase is creating a new document with new random id, instead of using the docRef.id created above which represents the new chat.
                    .collection("participants")
                    .doc(auth.currentUser.id)
                    .set(currentUser)
                   
                    db.collection("chats")
                    .doc(docRef.id) //not working
                    .collection("participants")
                    .doc(user.id)
                    .set(otherUser)

...

docRef.id works and is returned correctly as shown by the console.log. However, when I try to reference it in the following statements it doesn't work and Firebase creates a brand new document, instead of adding to the one I want.

Not sure what I'm doing wrong! Thanks.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

The code looks fine to me. Are you sure the same function isn't running again which is creating new chats? Also you are not awaiting those promises returned by set(). Try refactoring to this:

db.collection('chats').add({
  created: firebase.firestore.FieldValue.serverTimestamp()
}).then(async (docRef) => {
  // async ^^

  const newChatId = docRef.id
  console.log("New chat ID:" + newChatId)

  const newChatRef = db.collection("chats").doc(docRef.id)

  await newChatRef.collection("participants").doc(auth.currentUser.id).set(currentUser)
  await newChatRef.collection("participants").doc(user.id).set(otherUser)
})

Addionally, if you are adding multiple documents once, try using Batched Writes so they all are either added or not if any one of them fails.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!