Как обновить данные, не удаляя ничего другого? - PullRequest
0 голосов
/ 22 октября 2018

Мне нужно установить значение в моей базе данных 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)

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Чтобы обновить только те ключи, которые вы указали в своих данных, используйте update:

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

Это обновит только ключ Account_validated в ref и оставит другие дочерние свойства без изменений.

0 голосов
/ 22 октября 2018

Какие ошибки вы видите?

На первый взгляд в вашем цикле for есть опечатка:

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

У вас длина ошибки, поэтому value.lenght разрешится вundefined и выполнение просто пропустит цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...