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

115
Vistas
Funciones de Firebase con actualización de base de datos en tiempo real hijo de hijo

Tengo un hijo que se crea dentro de mi RTDB en firebase. Esto sucede mediante un servicio web que envía estos datos a Firebase a través de la API Rest. Sucede cada 10 min. Los datos llegan y la función los recoge cuando ocurren. El nodo contiene un par de valores, pero específicamente un dispositivo: el valor "3523EB" que se necesita para la siguiente parte. A continuación se muestra la estructura de los datos de ese nodo:

ingrese la descripción de la imagen aquí

El valor de 'dispositivo' aquí "3523EB" necesita actualizar una tabla diferente que debe buscar con e igual a en la tabla de dispositivos. El problema es que la tabla de dispositivos tiene el ID de usuario y la clave. Entonces, son 2 valores desconocidos los que necesita buscar, ya que los niños que busca contienen imei: "3523EB" y solo ese niño necesita ser actualizado.

Intenté usar ref.orderByChild("imei").equalTo(deviceRef).on("child_added", function(snapshot) {

ingrese la descripción de la imagen aquí

Por lo tanto, el dispositivo: "3523EB" en la tabla sigfox tiene que buscar y actualizar solo el niño con estos datos como imei: "3523EB" en la tabla de dispositivos , pero {UserId} y {key} donde reside la tabla en dispositivos es desconocido

Obtener los valores de sigfox en la función cuando llega a la base de datos no es un problema: tomar el valor y buscar al niño en los dispositivos y luego actualizar ese niño resulta ser un desafío.

 exports.UpdateDeviceData = functions.database.ref('sigfox/{key}/') .onCreate((snapshot, context) => { const deviceRef = snapshot.val()['device']; const batteryRef = snapshot.val()['battery']; const speedRef = snapshot.val()['speed']; const temperatureRef = snapshot.val()['temperature']; const latitudeRef = snapshot.val()['latitude']; const longitudeRef = snapshot.val()['longitude']; const timeRef = snapshot.val()['time']; const now = new Date().getTime(); functions.logger.log('Sigfox Data Updated for device: ', deviceRef); var db = admin.database(); var refi = db.ref("devices/"); refi.once("value", function(snapshot) { snapshot.forEach(function(child) { var key = child.key; snapshot.ref.update({ battery: batteryRef, speed: speedRef, temperature: temperatureRef, lati: latitudeRef, longi: longitudeRef, updateTime: timeRef }) functions.logger.log('Device Key Details: ',child.val()); }) }); return null; });

Por favor ayuda...

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

0

Reestructurado y funciona perfectamente bien ahora:

 var db = admin.database(); var query = db.ref('devices/' + deviceRef).orderByChild("imei").equalTo(deviceRef); query.on("child_added", function (snapshot) { snapshot.ref.update({ battery: batteryRef, speed: speedRef, temperature: temperatureRef, lati: latitudeRef, longi: longitudeRef, updated: now}) });

gracias a: Frank van Puffelen

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