How can I listen to a specific field change with firestore js sdk ?
In the documentation, they only seem to show how to listen for the whole document, if any of the "SF" field changes, it will trigger the callback.
db.collection("cities").doc("SF")
.onSnapshot(function(doc) {
console.log("Current data: ", doc && doc.data());
});
You can't. All operations in Firestore are on an entire document.
This is also true for Cloud Functions Firestore triggers (you can only receive an entire document that's changed in some way).
If you need to narrow the scope of some data to retrieve from a document, place that in a document within a subcollection, and query for that document individually.
Just out of the box what I do is watching before and after with the before and after method
For example now you should compare the changes for a specific field and do some actions or just return it.
Some more about before.data() and after.data() here
Listen for the document, then set a conditional on the field you're interesting in:
I'm listening for a document for a voice (
Castilian-female-IBM
), which contains an array of audio files, inwebm
andmp3
formats. When both of those audio files have come back asynchronously thensnapshot.data().audioFiles.length === 2
. This increments a conditional. When two more voices come back (Castilian-male-IBM
andLatin_American-female-IBM
) thenaudioFilesReady === 3
and the next function$scope.showNextWord()
fires.Just in case you want to ignore events in some fields, you can do something like:
I created a gist of the
field
function here. Remember, it is not avoiding your function to run if changes happen in other fields, it will just not handle that over to you and return a resolved promise instead.