Estoy usando node.js y obtengo datos de la base de datos en tiempo real de firebase. El problema es que estoy obteniendo datos como este:
para el código de obtención de datos! JS
import firebaseApp from '../config.js'; import { getDatabase, ref, onValue } from "firebase/database"; const userRef = ref(database, "Users"); onValue(userRef, (snapshot) => { if (snapshot.exists) { const data = snapshot.val(); console.log(data); // data printed to console } }, { onlyOnce: true });Salida de consola
{ "random-user-id-1": { "name": "Jhon Doe", "profile": "profilelink", "email": "example@email.com" }, "random-user-id-2": { "name": "Cr7", "profile": "profilelink", "email": "example@email.com" }, // and more... }Quiero mostrar estos datos como una matriz de objetos. Ejemplo de salida esperada
[ { "name": "Jhon Doe", "profile": "profilelink", "email": "example@email.com" }, { "name": "Cr7", "profile": "profilelink", "email": "example@email.com" } // and more........ ^_~ ]gracias :)
parece que solo necesita los valores de su dict, puede transformar sus datos de esta manera:
const lst = { "random-user-id-1": { "name": "Jhon Doe", "profile": "profilelink", "email": "example@email.com" }, "random-user-id-2": { "name": "Cr7", "profile": "profilelink", "email": "example@email.com" }, } const expectedFormatRes = Object.values(lst); console.log(expectedFormatRes);Una alternativa a la respuesta de Gil sería usar la función integrada de Firebase. forEach operación:
if (snapshot.exists) { let values = []; snapshot.forEach((child) => { value.push(child.val()); }) console.log(values); } Si bien es más largo, esto tiene la ventaja de que mantiene el orden en que la base de datos devolvió los datos, lo que se vuelve relevante cuando especifica una cláusula orderBy... en su consulta.