La matriz principal se elimina al actualizar la matriz dentro de una matriz. Solo quiero que se actualice la matriz anidada. ¿Cómo resolverlo? a continuación está mi código:
const handleSubmit = async (e) => { e.preventDefault(); const commentToAdd = { displayName: user.displayName, photoURL: user.photoURL, content: newComment, createdAt: timestamp.fromDate(new Date()), id: Math.random() } await updateDocument(project.id, { tasks: [ { comments: [{...project.tasks.comments, commentToAdd}], } ] })Firestore no admite la actualización de elementos de matriz en un índice dado. Primero debe buscar el documento, actualizar el campo de matriz con datos relevantes y actualizar toda la matriz nuevamente. Las matrices anidadas harán que sea aún más complejo actualizar un elemento anidado.
Simplemente puede hacer esto un poco creando una subcolección para tareas como se muestra a continuación:
projects -> { projectId } -> tasks -> { taskId }De esta forma, cada documento de tarea tendrá una matriz de comentarios. Sin embargo, aún tendrá que leer los comentarios y luego volver a escribir la matriz actualizada.
Como dijo @Dharmaraj, Firestore no admite la actualización de elementos de matriz en un índice dado.
Hasta donde entiendo tu pregunta. Si desea que no se elimine esa matriz principal, y simplemente actualice/agregue commentsToAdd en la matriz de comments . También puede usar setDoc en lugar de updateDoc . Vea el código a continuación, por ejemplo.
for (let step = 0; step < 5; step++) { const commentToAdd = { displayName: `someName-${step}`, photoURL: `someURL-${step}`, content: `someContent-${step}`, createdAt: new Date(), id: Math.random() }; await setDoc({someRef}, { tasks: { comments: arrayUnion(commentToAdd) } }, {merge: true}) } El código anterior daría como resultado: 
Recorrí el código para enviar múltiples comentarios en el campo. Solo una nota, al hacer esto, sus tipos de campo se actualizarán en consecuencia:
- tasks: `map` - comments: `array` - commentFields: `map`También puede consultar esta documentación para obtener más información.