Is it acceptable to increment a counter with a realtime database trigger using transaction?
exports.incPostCount = functions.database.ref('/threadsMeta/{threadId}/posts') .onWrite(event => {     admin.database().ref('/analytics/postCount')     .transaction(count => {         if (count === null) {             return count = 1         } else {             return count + 1         }     }) }); 
                Firestore now has a specific operator for this called FieldValue. increment() . By applying this operator to a field, the value of that field can be incremented (or decremented) as a single operation on the server.
Cloud Functions includes a perpetual free tier for invocations to allow you to experiment with the platform at no charge. Note that even for free tier usage, we require a valid billing account.
A FieldValue is a union type that may contain a primitive (like a boolean or a double), a container (e.g. an array), some simple structures (such as a Timestamp ) or some Firestore-specific sentinel values (e.g. ServerTimestamp ) and is used to write data to and read data from a Firestore database.
Definitely! In fact, that's exactly how it's done in this code sample, although with a few small differences:
exports.countlikechange = functions.database.ref("/posts/{postid}/likes/{likeid}").onWrite((event) => {   var collectionRef = event.data.ref.parent;   var countRef = collectionRef.parent.child('likes_count');    return countRef.transaction(function(current) {     if (event.data.exists() && !event.data.previous.exists()) {       return (current || 0) + 1;     }     else if (!event.data.exists() && event.data.previous.exists()) {       return (current || 0) - 1;     }   }); });   Notably, this sample handles both an increment and a decrement case depending on whether the child node is being created or deleted.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With