Firebase 如果值存在,则更新实例

7 浏览
0 Comments

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)

0
0 Comments

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)

0