Snippetman
Snippetman

Reputation: 19

How to update data without deleting anything else?

I need to set a value on my Firebase realtime-database.

Here is my database organization:

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

I make this snippet for write and it works:

<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>

But in this way the data that were present are deleted and only account_validated state is present in the path. So I thought I had to first retrieve all the data already in possession and then send them to the database along with the new data.

This is what is not working in my code:

    //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)

Upvotes: 0

Views: 892

Answers (2)

Frank van Puffelen
Frank van Puffelen

Reputation: 600006

To update only the keys that you specify in your data, use update:

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

This will update only the Account_validated key under ref, and leave other child properties unmodified.

Upvotes: 2

Batters
Batters

Reputation: 749

What errors are you seeing?

At first glance you've got a typo in your for loop:

for (var i=0; i < value.lenght; i++)

You've misspelt length so value.lenght will resolve to undefined and execution will just skip over the loop.

Upvotes: 0

Related Questions