¿Cómo saber nuevos datos en las funciones de la nube de Firebase?

¿Cómo saber si los datos no están cambiando y qué hay de nuevo en las funciones de Firebase Cloud? He intentado varias opciones diferentes para marcar que si los datos solo se cambian, entonces no envío notificaciones push. También intenté obtener de la instantánea _newData y _data nodos secundarios para comparar el número, y si __newData es mayor, entonces este es un nuevo registro, pero no funcionó. Por favor, dime cómo se puede hacer.

Un fragmento de código de ejemplo.

module.exports = functions.database.ref('/userListEvents/{userID}') .onWrite(event => { const snapshot = event.data; if (event.data.val() && !event.data.previous.val()) { console.log('send push notification'); } else if (snapshot._data) { console.log('send push notification'); } else { return console.log('data was removed'); }; } 

Árbitro

 functions.database.ref('/cards/{cardID}/interestedUsers') .onWrite(event => { 

Actualizado: esta opción no me funciona, porque si lo hago, por ejemplo, functions.database.ref ('/ userListEvents / {userID} / {eventID}') , se informa de un error que el campo no debe estar vacío.

Lo intenté pero no conseguí un buen resultado.

 if (event.data.val() && !event.data.previous.val()) { console.log('send push notification'); } else if (event.data.val() && event.data.previous.val()) { const newData = event.data.val(); const previousData = event.data.previous.val(); console.log('newData', newData, 'previousData', previousData); const newDataKeys = Object.keys(newData); const previousDataKeys = Object.keys(previousData); if (newDataKeys.length > previousDataKeys.length) { console.log('send push', newDataKeys.length, previousDataKeys.length); } else { return console.log('just update data', newDataKeys.length, previousDataKeys.length); } } else { return console.log('removed data') } 

event.data.current.val() comparar utilizando event.data.current.val() no event.data.val() . Ejemplo:

 exports.detectChange = functions.database.ref('/userListEvents/{userID}') .onWrite(event => { const crnt = event.data.current; const prev = event.data.previous; if (crnt.val() && !prev.val()) { // value created console.log('Created: send push notification'); } else if (!crnt.val() && prev.val()) { // value removed console.log('Removed: send push notification'); } else { // value updated console.log('Updated'); } }); 

Revisa el siguiente ejemplo:

 exports.Observedata = functions.database.ref("/location/{id}").onWrite((event) => { const id = event.params.id; const snap = event.data; if (!snap.exists() && snap.previous.exists()) { //deleted data } else if (snap.exists() && !snap.previous.exists()) { //newly addded data } else if (!snap.child("isactive").val() && snap.child("isactive").changed()) { //if the node isactive changed its value from false to true } }); 

Otra opción que tiene, además de lo que ya se ha publicado aquí, es usar el método de changed() como un indicador para indicar si una referencia dada ha cambiado o no. Ejemplo:

 exports sampleFunction = functions.database.ref('/userListEvents/${userId}') .onWrite(event => { var eventSnapshot = event.data; if (eventSnapshot.changed()) { // Here you know something has changed } }); 

Aunque no le dice qué ha cambiado, es una forma sencilla de saber si algo ha cambiado en un nodo determinado. Hay otro ejemplo en la documentación .