首页 文章

如何使用 Cloud 功能将子项添加到Firebase实时数据库中的列表?

提问于
浏览
0

我尝试创建一个Firebase Cloud 功能,对实时数据库中的新“事件”做出反应,并在相应用户的通知列表中添加“通知”对象 . 我成功获取新的事件信息,以相应的用户推送通知,但不以列表格式(但以hashmap格式) .

因此,我尝试获取子项的数量,以便用良好的索引推送新的通知 . 在这种情况下,我不知道如何管理承诺 .

我们的想法是从新事件中获取sport_name和level,以获得Sport中的相应用户并为每个用户添加通知 .

  • 有我的 Cloud 功能:
exports.detectEvent = functions.database
.ref("Event/{eventID}")
.onCreate((snapshot, context) => {
    const event = snapshot.val();
    const sport = event.sport.name;
    const level = event.niveau;
    const name = event.name;
    var promises=[];
    var path = "Sports/" + sport + "/" + level;
    var notif = {
        type : "Event",
        contentID : context.params.eventID,
        message : sport + " : Un nouvel événement vous correspond ! ",
        seen : false,
        date : "01"
    };
    console.log('path ', path);
    return admin.database().ref(path).once("value", function(result) {
        var datas = result.val();
        for (var property in datas)  {
            if (datas.hasOwnProperty(property)) {
                promises.push(admin.database().ref("Users/"+datas[property]+"/notifications").on("value", function(snapshot) {
                    console.log("There are "+snapshot.numChildren()+" notifs");
                    admin.database().ref("Users/"+datas[property]+"/notifications").child(snapshot.numChildren()).set(notif)
                  })); 

        }

    }
    return Promise.all(promises);
})

});

  • 有表:

Table

1 回答

  • 0

    此代码有效,但它会为通知创建一个随机密钥 . 如何将整数(0,1,2,...)作为键,以便在我的数据库中有 list

    <pre>
    exports.detectEvent = functions.database
    .ref("Event/{eventID}")
    .onCreate((snapshot, context) => {
        const event = snapshot.val();
        const sport = event.sport.name;
        const level = event.niveau;
        const name = event.name;
        var promises=[];
        var path = "Sports/" + sport + "/" + level;
        var notif = {
            type : "Event",
            contentID : context.params.eventID,
            message : sport + " : Un nouvel événement vous correspond ! ",
            seen : false,
            date : "01"
        };
        console.log('path ', path);
        return admin.database().ref(path).once("value", function(result) {
            var datas = result.val();
            for (var property in datas)  {
                if (datas.hasOwnProperty(property)) {
                    promises.push(admin.database().ref("Users/"+datas[property]+"/notifications").push(notif));
                }
    
            }
            return Promise.all(promises);
        })
    });
    
    <code>
    

相关问题