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:
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) {
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...
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