如何在Firebase数据库中所有消息子级中将“读取”更新为true

时间:2019-04-29 13:05:44

标签: javascript reactjs firebase firebase-realtime-database

database structure

我的消息子级具有属性为read的子级。我想将其设置为true。如何在javascript中做到这一点? (我想在单个命令中将所有消息子级的read属性设置为true)。 我尝试了let ref = yield firebase.database().ref(groups/${groupId}/messages).update({read:true}),但是没有用。 我也想知道这是否是数据库的好结构

感谢:)

1 个答案:

答案 0 :(得分:2)

您首先必须阅读messages节点以获取其所有子节点(使用once()方法),然后使用update()方法在一个调用中更新所有子节点

以下代码可以解决问题:

        //set groupId value
        var db = firebase.database();
        db.ref(`groups/${groupId}/messages`)
        .once('value')
        .then(function (snapshot) {
              var updates = {};
              snapshot.forEach(function (childSnapshot) {
                  var key = childSnapshot.key;
                  updates[`groups/${groupId}/messages/${key}/read`] = true;
              });
              return db.ref().update(updates);
         });

另请参阅https://firebase.google.com/docs/database/web/read-and-write#update_specific_fields


“我还想知道这是否是数据库的良好结构”->这是一个相当广泛的问题,答案取决于许多因素,包括您的用户要求,应用程序的屏幕等... < / p>