如果firebase中存在数据,则更新数据
我正在尝试更新数据(如果存在)如果firebase中存在数据,则更新数据,firebase,ionic-framework,firebase-realtime-database,Firebase,Ionic Framework,Firebase Realtime Database,我正在尝试更新数据(如果存在) var ref = firebase.database().ref().child('users'); var refUserId = firebase.database().ref().child('users').orderByChild('id').equalTo(Auth.$getAuth().uid); refUserId.once('value', function (snapshot) { console.log(snapshot);
var ref = firebase.database().ref().child('users');
var refUserId = firebase.database().ref().child('users').orderByChild('id').equalTo(Auth.$getAuth().uid);
refUserId.once('value', function (snapshot) {
console.log(snapshot);
if (snapshot.exists()) {
snapshot.ref().update(vm.user_infos);
} else {
ref.push({
player: vm.user_infos.player,
id: vm.user_infos.id
}, function(error) {
console.log(error);
})
}
});
推送工作正常,但更新失败
snapshot.ref不是一个函数
在快照()日志控制台中:
我也试过这样做:
if (snapshot.exists()) {
refUserId.update({
player: vm.user_infos.player,
id: vm.user_infos.id
}, function(error) {
console.log(error);
})
结果:
refUserId.update不是一个函数
用户结构
第一个问题是快照是一个对象,而不是一个函数 第二个是快照引用了
用户
路径,因此您应该像下面这样检查与查询匹配的用户:
var ref=firebase.database().ref().child('users');
var refueserid=ref.orderByChild('id').equalTo(Auth.$getAuth().uid);
refUserId.once('value',函数(快照){
if(snapshot.haschilds()){
snapshot.forEach(函数(子函数){
child.ref.update(虚拟机用户信息);
});
}否则{
snapshot.ref.push({
播放器:vm.user\u infos.player,
id:vm.user\u infos.id
});
}
});
如果您想知道更新
或推送
何时完成,您可以使用承诺:
referserid
.once('值')
.then(功能(快照){
if(snapshot.haschilds()){
返回snapshot.forEach(函数(子函数){
child.ref.update(虚拟机用户信息);
});
}否则{
返回snapshot.ref.push({
播放器:vm.user\u infos.player,
id:vm.user\u infos.id
});
}
})
.然后(函数(){
console.log('update/push done');
})
.catch(函数(错误){
console.log(错误);
});
第一个问题是快照是一个对象,而不是一个函数
第二个是快照引用了用户
路径,因此您应该像下面这样检查与查询匹配的用户:
var ref=firebase.database().ref().child('users');
var refueserid=ref.orderByChild('id').equalTo(Auth.$getAuth().uid);
refUserId.once('value',函数(快照){
if(snapshot.haschilds()){
snapshot.forEach(函数(子函数){
child.ref.update(虚拟机用户信息);
});
}否则{
snapshot.ref.push({
播放器:vm.user\u infos.player,
id:vm.user\u infos.id
});
}
});
如果您想知道更新
或推送
何时完成,您可以使用承诺:
referserid
.once('值')
.then(功能(快照){
if(snapshot.haschilds()){
返回snapshot.forEach(函数(子函数){
child.ref.update(虚拟机用户信息);
});
}否则{
返回snapshot.ref.push({
播放器:vm.user\u infos.player,
id:vm.user\u infos.id
});
}
})
.然后(函数(){
console.log('update/push done');
})
.catch(函数(错误){
console.log(错误);
});
谢谢。但是在更新之后,它不是更新信息,而是创建一个新的感谢。我刚刚在代码中修改了它:child.ref().update(vm.user\u infos);为此:child.ref.update(vm.user\u infos);很好,谢谢。但是在更新之后,它不是更新信息,而是创建一个新的感谢。我刚刚在代码中修改了它:child.ref().update(vm.user\u infos);为此:child.ref.update(vm.user\u infos);运作良好