【问题标题】:Firebase realtime:How to update particular value of child in Firebase Database javascriptFirebase 实时:如何在 Firebase 数据库 javascript 中更新子项的特定值
【发布时间】:2019-12-16 09:38:33
【问题描述】:

当下面代码中的发件人等于“5”时,我想将 isseen 值更新为 true。如何将 issen 的值更新为 true 。我的数据库结构如下:

Chats
-LvuhnORi1ugp8U2Ajdq
isseen: "false"
message: "hi"
receiver: "OX0pReHXfXUTq1XnOnTSX7moiGp2"
sender: "5"
time: "16:23:22 12/12/2019"

-Lvuw34ZiXwD6UfWWeNm
isseen: "false"
message: "hi"
receiver: "OX0pReHXfXUTq1XnOnTSX7moiGp2"
sender: "7"
time: "17:17:22 12/12/2019"

我尝试使用此代码,但她只更新我聊天表中第一个实例的一个值,我想在发件人等于 5 时将 isseen 的值更新为 true

  SetSeen = ()=>{

    var db = firebase.database();
    var currentUser = firebase.auth().currentUser|| '';
    var query=   db.ref("Chats/"+currentUser.uid).orderByChild("sender").equalTo(this.props.inBox.inBox|| '');
query.once("child_added", function(snapshot) {
  snapshot.ref.update({isseen: "true" })
});
  }

谁能帮帮我

【问题讨论】:

  • 你试过答案了吗?

标签: javascript reactjs firebase firebase-realtime-database


【解决方案1】:

改变这个:

    var query=   db.ref("Chats/"+currentUser.uid).orderByChild("sender").equalTo(this.props.inBox.inBox|| '');

进入这个:

    var query=   db.ref("Chats").orderByChild("sender").equalTo("5");

在节点Chats添加引用,然后orderByChild将能够访问属性sender,您可以使用equalTo检索您想要的数据

【讨论】:

    【解决方案2】:

    您的代码仅适用于聊天表中的第一个实例的原因是您只订阅了一次 child_added 事件:

    query.once("child_added", function(snapshot) {
    

    将此更改为on(...) 将重新触发每个匹配结果的函数。

    query.on("child_added", function(snapshot) {
    

    如果可能,我会更改您的代码,以便对每个 isseen 值的更新是原子的(全有或全无),并使用承诺来跟踪任何错误。这可以使用以下代码来实现:

    SetSeen = () => {
        const senderId = this.props.inBox.inBox;
        const currentUser = firebase.auth().currentUser;
    
        // fail-fast error handling
        if (!senderId) {
          return Promise.reject(new Error('Sender required'));
        } else if (!currentUser) {
          return Promise.reject(new Error('User required'));
        }
    
        // prepare query
        var db = firebase.database();
        var query = db.ref("Chats/"+currentUser.uid).orderByChild("sender").equalTo(senderId);
    
        return query.once("value")
          .then(queryResults => {
            if (!queryResults.hasChildren()) {
              return; // no results, nothing to update
            }
    
            var pendingUpdates = {};
    
            // add each value to be updated
            queryResults.forEach((chatSnapshot) => {
              pendingUpdates[chatSnapshot.key + "/isseen"] = "true";
            });
    
            // commit changes
            return queryResults.ref.update(pendingUpdates);
          });
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 2018-07-17
      相关资源
      最近更新 更多