Firebase 如果值存在,则更新实例
Firebase 如果值存在,则更新实例
如果实时数据库中存在该值,我想要更新一个实例。
如果实时数据库中存在与今天相同的日期,将新数据推送到resi中。
因此,每个日期都有很多resi数组。
我尝试了这个方法,它在数据库中创建了一个新实例。
firebase.database().ref('resi-list').orderByChild("date").equalTo(moment().format('dddd, MMMM Do YYYY')).once('value').then(snapshot => {
if (snapshot.val()) {
firebase.database().ref('resi-list').child(snapshot.val().key).update({
resi: [{
noResi: resiForm.noResi,
type: resiForm.type,
}]
}).then(res => AlertInfo('成功', '成功发布数据!', 'success')).catch(err => AlertInfo('Oops', '发布数据错误!', '错误'));
} else {
firebase.database().ref(`resi-list`).push({
date: moment().format('dddd, MMMM Do YYYY'),
resi: [{
noResi: resiForm.noResi,
type: resiForm.type,
}],
}).then(res => {
AlertInfo('成功...', '成功发布数据', 'success');
fetchResiList();
}).catch(err => AlertInfo('Oops', '发布数据错误', '错误'));
}
}).catch(err => console.log(err));
DB图片:[点击此处查看](https://i.stack.imgur.com/kxzTW.png)
Firebase Update Instance If The Value Exist问题的出现原因是希望在Firebase Realtime Database中确保某个值的唯一性。解决方法是将该值作为节点的键来存储。
如果想要在Realtime Database中确保某个值的唯一性,应该将其作为节点的键来使用。这是唯一保证其唯一性的方式。
因此,不应该将日期存储为0
下的属性,而是应该将其作为键来使用,如下所示:
resi-list: {
"2021-08-06": {
resi: {
...
}
}
}
现在,每个数据只能在resi-list
下出现一次。此外,我还更改了日期格式,以便更容易进行排序和过滤。
如果还希望在每个日期的resi
下,noResi
值也是唯一的,可以采用同样的方法,将noResi
值作为这些节点的键:
resi-list: {
"2021-08-06": {
resi: {
"EX102039-48576": {
...
}
}
}
}
另外,还可以参考以下内容:
- [unique property in Firebase](https://stackoverflow.com/questions/41443767)
- [Firebase android : make username unique](https://stackoverflow.com/questions/35243492)
- [Firebase security rules to check unique value of a child #AskFirebase](https://stackoverflow.com/questions/39149216/39151205#39151205)