firebase数据库更新字段基于另一个字段值

时间:2017-01-21 12:28:47

标签: javascript firebase firebase-realtime-database

我在数据库中有两个字段,我想在更新fieldB之前将旧值从fieldA复制到另一个字段fieldB

MyDatabase.ref('/myusers/' + firebaseUser.uid).update({ 
   fieldA: firebaseUser.uid.fieldB,
   fieldB: firebase.database.ServerValue.TIMESTAMP
 });


我收到一条错误消息,指出该属性未定义 firebaseUser.uid.fieldB

我怎样才能以正确的方式实现这一目标?

更新

以下是提示之后的样子:

MyDatabase.ref('/myusers/' + firebaseUser.uid).once('value').then(function (snapshot) {
    var usrname = snapshot.val().username;
    toastr.info('Success.', 'Welcome ' + usrname + '!');
    $scope.oldfieldB = snapshot.val().fieldB;
});

MyDatabase.ref('/myusers/' + firebaseUser.uid).update({
   fieldA: $scope.oldfieldB,
   fieldB: firebase.database.ServerValue.TIMESTAMP
});

我得到了同样的错误:未定义firebaseUser.uid.fieldA

2 个答案:

答案 0 :(得分:2)

我认为这是一个字符串,对吧?

 firebaseUser.uid

firebaseUser.uid引起的错误没有fieldB属性(因为它只是一个字符串)

您应该将fieldB的值保存到变量并使用它更新数据库

MyDatabase.ref('/myusers/' + firebaseUser.uid).update({ 
   fieldA: fieldBVariable,
   fieldB: firebase.database.ServerValue.TIMESTAMP
 });

答案 1 :(得分:2)

在执行value

之前,您需要等待update事件
var ref = MyDatabase.ref('/myusers/' + firebaseUser.uid);
ref.once('value').then(function (snapshot) {
  return ref.update({
    fieldA: snapshot.val().fieldB,
    fieldB: firebase.database.ServerValue.TIMESTAMP
  });
});

或者,如果您使用transaction,则可以在一次通话中执行读写操作:

var ref = MyDatabase.ref('/myusers/' + firebaseUser.uid);
ref.transaction(function (data) {
  if (data !== null) {
    data.fieldA = data.fieldB;
    data.fieldB = firebase.database.ServerValue.TIMESTAMP;
  }
  return data;
});