Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

292
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda