I have created a comment section in my react app. The comment section has following data structure in the firestore:-
comments: [{
comment: "First comment",
replies: [{
reply: "first reply"
}]
},{
comment: "Second comment",
replies: [{
reply: "first reply"
}]
}]
If I want to add a new comment I do this by: –
db.collection("myCollection").doc("0").update({
comments: firebase.firestore.FieldValue.arrayUnion({
comment: "New Comment",
replies: []
})
})
Now, what I actually want to do is to do is to add a new reply to the existing comment. But I can’t find any way to do it. For example, I want this to happen in the data structure defined above: –
comments: [{
comment: "First comment",
replies: [{
reply: "first reply"
},{
reply: "second reply"
}]
},{
comment: "Second comment",
replies: [{
reply: "first reply"
}]
}]
So how can I do this?
Please help me solve this. Thank you!
Advertisement
Answer
You’re trying to update an array element by its index, which is not an atomic operation on Firestore.
You’ll need to:
- Read the document and retrieve the
comments
array from it. - Update the
comments
array in your application code. - Write the updated
comments
array back to the document.
If you were to store the comments in a subcollection, you can probably use an arrayUnion
to update a specific comment, since then the replies are a top-level field in that document. But I doubt it is worth the added overhead of the additional documents and document read operations in this scenario.
Also see: