javascript - 如何在不删除其他内容的情况下更新数据?

标签 javascript firebase firebase-realtime-database

我需要在我的 Firebase 实时数据库上设置一个值。

这是我的数据库组织:

Users:
       U20180422:
                  ID: U20180422
                  Name: "Jason"
                  Surname: "Smith" 
                  Address: "4198 Norma Avenue"
                  Age: "30"
                  creation date: "04/22/2018"
       U20180311: ...
       U20180304: ...
       U20180215: ...
       ...

我编写了这个代码片段,它可以工作:

<script language="javascript">
//this retrieves from the form of registration the ID of the user
var userId = document.getElementById("searchfield").value;

// Initialize Firebase
  var config = {
    //my configurations
  };
  firebase.initializeApp(config);
  console.log(firebase);

var database = firebase.database();
var ref = database.ref('Users/' + userId);

var data = {
Account_validated = "OK"
}
ref.set(data)
</script>

但通过这种方式,存在的数据将被删除,并且路径中仅存在 account_validated 状态。所以我想我必须首先检索已经拥有的所有数据,然后将它们与新数据一起发送到数据库。

这在我的代码中不起作用:

    //Retrieve from database
        ref.on('value', gotData, errData);

 function gotData(data) {
    var value = data.val();
    var getvalue = Object.value(value);
    for (var i=0; i < value.lenght; i++) {
    var k = value[i];
    var name= value[k].Name;
    var surname= value[k].Surname;
    var address= value[k].Address;
    var age= value[k].Age;
    var creation_account_date= value[k].creation date;
    console.log(name, surname, address, age, creation date);
    }
 }

 function errData(err) {
    console.log('Error!');
    console.log(err);
 }

 {
    snapshot.forEach(function(child) {
        var childData = child.val();
        var name=child.val().Name;
        var surname=child.val().Surname;
        var address=child.val().Address;
        var age=child.val().Age;
        var creation_account_date=child.val().creation date
    });
});


   //Write
   var data = {
        ID: userId,
        Name: name,
        Surname: surname,
        Address: address,
        Age: age,
        creation date: creation_account_date
        }
   ref.set(data)

最佳答案

要仅更新您在数据中指定的键,请使用update:

var data = {
  Account_validated: "OK"
}
ref.update(data)

这将仅更新 ref 下的 Account_validated 键,并保持其他子属性不变。

关于javascript - 如何在不删除其他内容的情况下更新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52931313/

相关文章:

javascript - 通用模块定义 IIFE 模式

javascript - Jquery keydown 只能工作一次

ios - Firebase 将数组数据导入 TableView

javascript - 如何删除具有云功能的 Node ?

java - 按降序对 Firebase 数据进行排序

java - Firebase Android 中的 ListView 制作

javascript - 访问值是否在对象内部

javascript - 正确调用 JQuery 方法

javascript - Firebase:在日历中显示子节点

javascript - Firebase Cloud Function - 将文档添加到 firestore 时向 iOS 设备推送通知