Firebase功能(触发器)“动态”写入/更新Firebase节点

时间:2017-08-08 15:57:15

标签: node.js firebase firebase-realtime-database google-cloud-functions

我想要从具有四个子节点的Firebase节点游戏/ {gid} / BoxScores中检索数据:Q1, Q2, Q3, Q4

以下是我试图实施的代码;其中qtrDesc是对BoxScores中任何一个子节点的引用:Q1 or Q2 or Q3 or Q4

exports.boxScoresUpdate = functions.database.ref('/Games/{gid}/BoxScores').onWrite(event => { 

    event.data.ref.parent.child('Qtr').once('value', data => {

        console.log('Qtr is: ', data.val());

        for(let i = data.val(); i > 0; i--) {

            let qtrDesc = "Q".concat(i);

            console.log('qtrDesc: ', qtrDesc); // Outputs the desired 'Q1, Q2, Q3, Q4'

            // Outputs is "undefined" in the function logs
            console.log('Qtr Score is: ', newValue.qtrDesc); // ****Does not reference the desired child node

        }

    });

});

上面代码的问题在于,Firebase功能信息中心日志中的输出为undefined,因为它试图获取newValue qtrDesc(不存在)而不是newValue Q1 or Q2 or Q3 or Q4根据需要!?

json节点是:

"Games": {
    "12345": {
        "Date": "20170819",
        "BoxScores": {
            "Q1": "10",
            "Q2": "21",
            "Q3": "90",
            "Q4": "100"
        },
        "Qtr": "4"
     }
 }

2 个答案:

答案 0 :(得分:0)

如果没有看到您的数据结构,很难确定。但我认为你正在寻找:

event.data.ref.parent.child('Qtr').once('value', data => {
    data.forEach(quarterSnap => {
        let qtrDesc = quarterSnap.key;
        let qtrVal = quarterSnap.val();

        console.log(qtrDesc, qtrVal);
    }
});

如果这不是您所需要的,请编辑您的问题以包含您正在使用的JSON结构的片段(作为文字,没有屏幕截图)。您可以通过单击"导出JSON"来实现此目的。您Firebase Database console中的链接。

答案 1 :(得分:0)

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

admin.database(); 

供参考