我在数据库中有两个字段,我想在更新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
。
答案 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;
});