Entonces, soy un novato en el uso de la base de datos en tiempo real de Firebase y no puedo eliminar la clave secundaria de los productos con la identificación especificada.
Probé este enfoque pero no tuvo ningún éxito:
removeProductById = async (id, user) => { const userProductRef = db.ref(`products/product`); try{ var query = userProductRef.orderByChild('id').equalTo(id); query.remove() }) }catch(error){ console.log(`The error has occured ${error.message}`) } }Entonces, quiero saber cómo se puede eliminar cualquier tipo de clave por el valor que especifiquen. Gracias de antemano, siempre me han ayudado chicos.
Hay dos problemas aquí:
Su consulta comienza en un nodo products/product , que no existe en su base de datos, y luego ordena/filtra la propiedad id de cada nodo secundario.
En cambio, lo que desea es comenzar en el nodo de products y luego ordenar/filtrar en su propiedad de product/id de cada nodo secundario:
En codigo:
const userProductRef = db.ref(`products`); var query = userProductRef.orderByChild('product/id').equalTo(id); No olvide que deberá definir un índice para product/id para esto en el nivel de products en sus reglas.
No puede simplemente pasar la consulta y eliminar la instrucción a Firebase. Para escribir un nodo en la base de datos, deberá conocer la ruta completa a ese nodo.
Así que necesitarás:
Con la query anterior, eso sería:
query.once("value").then((snapshot) => { snapshot.forEach((child) => { child.ref.remove(); }); })O con una actualización por lotes/ruta múltiple:
query.once("value").then((snapshot) => { let updates = {}; snapshot.forEach((child) => { updates[child.key] = null; }); ref.update(updates); })