Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

291
Vistas
¿Cómo eliminar un elemento de matriz de firestore usando JavaScript?

Estoy tratando de agregar un botón de eliminación a mi página. la devolución de llamada del detector de eventos funciona correctamente, excepto por la función updateDoc.

 const deleteBook = document.getElementsByClassName('deleteBook'); for (let i = 0; i < deleteBook.length; i++) { deleteBook[i].addEventListener('click', async () => { //book to delete const bookToDelete = deleteBook[i].parentElement.firstElementChild.textContent // collection title to delete the book from const bookCol = deleteBook[i].parentElement.parentElement.parentElement.firstElementChild.textContent // get a snap of the database const docRef = doc(dataBase, 'users', `${auth.currentUser.uid}`) const docSnap = (await getDoc(docRef)).data(); // loop over the collections and get a match with the bookCol for (const col in docSnap) { if (docSnap[col].title === bookCol) { console.log('col to delete from found') console.log(`book to delete ${bookToDelete}`) await updateDoc(doc(dataBase, 'users', `${auth.currentUser.uid}`), { [`${col}.books`]: arrayRemove(`${bookToDelete}`) }).then(()=>{ // fullfiled console.log('book deleted') }, ()=>{ // rejected console.log('promis rejected') }) } } }) }

Col es el objeto que contiene la matriz de libros. En la consola siempre imprime el libro eliminado, pero en la consola firestore, nada cambia. Esta es una captura de pantalla de la base de datos. ingrese la descripción de la imagen aquí

Realmente agradecería cualquier ayuda y gracias.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

He replicado el comportamiento que estás experimentando. Intenté cambiar el contenido de ${bookToDelete} a cualquier palabra o incluso ID. Siempre devuelve book deleted , incluso si se elimina o no. La línea de código a continuación debe cambiarse para obtener el resultado correcto.

 .then(()=>{ // fullfiled console.log('book deleted') }, ()=>{ // rejected console.log('promis rejected') })

He creado una solución alternativa para su caso de uso con este tipo de problema. Vea el fragmento a continuación:

 const db = getFirestore(); const colName = "users"; const arrayName = "books"; const usersCol = collection(db, colName); const userRef = doc(db, colName, `${auth.currentUser.uid}`); const arrayRef = `${col}.${arrayName}`; const q = query(usersCol, where(arrayRef, "array-contains", `${bookToDelete}`)); const querySnapshot = await getDocs(q) .then((querySnapshot) => { // Removal of object will not proceed if the querySnapshot is empty. if ((querySnapshot.empty)) { console.log("No object found!"); } else { // Proceeds to removal of object. updateDoc(userRef, { [arrayRef]: arrayRemove(`${bookToDelete}`) }) .then(() => { // Check again if the object was deleted successfully. const querySnapshot = getDocs(q) .then((querySnapshot) => { if ((querySnapshot.empty)) { console.log("Book Deleted!"); } else { console.log("Failed!"); } }) }); } }) // Catch if there are any Firebase errors. .catch(error => console.log('Failed!', error));

La solución alternativa que creé consultará el objeto en la matriz y luego eliminará el objeto en la matriz si existe. Después de eliminarlo, volverá a consultar para comprobar si el objeto se ha eliminado y registrará Book Deleted! . Vise versa para verificar si el objeto no existe en la primera consulta, no procederá a eliminarlo y registrará No object found! .

La solución en sí aún se puede mejorar. Puede agregar cualquier lógica que desee para su caso de uso.


También recomendaría crear una solicitud de función si desea tener este tipo de función junto con el método arrayRemove .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda