Cloud functions for Firebase: how to get event.data.ref.parent.child ("xxx"). Val?

I have a structure on Firebase like this:

members
 |- -kSjJSDFjl2DFc
          |- isDeleted: true
          |- gender: "male"

In my cloud function, I wrote:

exports.doMemberDeletion = functions.database.ref("/members/{memberId}/isDeleted").onWrite(event => {
    const isDeleted = event.data.val();

    if (isDeleted) {
        const gender = event.data.ref.parent.child("gender").val; // Error here
        console.log("Deleted a " + gender + " member");
    }
});

However, it gives an error on event.data.ref.parent.child().val, please advise how to get the value in this case. Thank!

+3
source share
2 answers

The DeltaSnapshot specified in the event data is for a consistent location only. Data above in tree or in siblings is not available. If your member data is not so large that you are concerned about listening to changes in any of them, you can do this:

// listen one level higher in tree    
exports.doMemberDeletion = functions.database.ref("/members/{memberId}").onWrite(event => {
    const wasDeleted = event.data.previous.child('isDeleted').val();
    const isDeleted = event.data.current.child('isDeleted').val();

    if (!wasDeleted && isDeleted) {
        const gender = event.data.current.child('gender').val();
        console.log("Deleted a " + gender + " member");
    }
});

, :

exports.doMemberDeletion = functions.database.ref("/members/{memberId}/isDeleted").onWrite(event => {
    const isDeleted = event.data.val();

    if (isDeleted) {
        // as noted in Jen Person answer, use adminRef for unrestricted access
        return event.data.adminRef.parent.child('gender').once('value').then((snapshot) => {
           console.log("Deleted a " + snapshot.val() + " member");
        });
    }
});
+10

? , event.data.ref event.data.adminRef . . .

+3

Source: https://habr.com/ru/post/1676379/


All Articles