Firebase的云功能:如何获取event.data.ref.parent.child("xxx").val?

Sof*_*com 3 firebase firebase-realtime-database google-cloud-functions

我在Firebase上有一个像这样的结构:

members
 |- -kSjJSDFjl2DFc
          |- isDeleted: true
          |- gender: "male"
Run Code Online (Sandbox Code Playgroud)

在我的云功能中,我写道:

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");
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,它会出错event.data.ref.parent.child().val,请告知如何在这种情况下获取值.谢谢!

Bob*_*der 10

事件数据中提供的DeltaSnapshot仅用于匹配的位置.树或兄弟姐妹中较高的数据不可用.如果您的会员数据不是那么大,以至于您担心要监听其中任何一项的更改,您可以这样做:

// 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");
    }
});
Run Code Online (Sandbox Code Playgroud)

您的原始方法也有效,但需要获取性别数据:

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

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