我想更改数据库中元素的位置。我尝试首先从一个位置删除该元素,然后将其推送到另一个位置。方法如下:
firebase.database().ref('completed').on('value', (snapshot) => {
snapshot.forEach((snapchild) => {
if(snapchild.val().title === item.title && snapchild.val().id === item.id) {
firebase.database().ref('todos').push(snapchild.val()).then(() => {
firebase.database().ref(`anotherlocation/${snapchild.key}`).remove()
}
}
})
})
不幸的是,它不起作用,该元素被删除,但没有被添加到另一个位置。 这是正确的做法吗?
最佳答案
代码存在一些问题:
- 您正在新位置调用
push
,这意味着该项目已使用新 key 添加。您可能希望该项目在新位置具有与旧位置相同的 key 。 - 您正在执行两个数据库操作,这意味着第一个操作可能会成功,而另一个操作可能会失败。通过使用单个多位置更新,您可以确保两个写入都成功,或者两者都不发生。
- 您阅读的内容超出了需要。由于您知道要移动的项目的
id
,因此您可以将读取操作限制于此。
在代码中:
var query = firebase.database().ref('completed').orderByChild('id').equalTo(item.id);
query.on('value', (snapshot) => {
snapshot.forEach((snapchild) => {
if(snapchild.val().title === item.title) {
var updates = {};
updates['/todos/'+snapchild.key] = snapchild.val();
updates['/completed/'+snapchild.key] = null;
firebase.database().ref().update(updates);
}
})
})
这会将带有 item.id
的已完成项目移回 todos
。我不确定这是否是您想要执行的确切 Action ,因为您的问题并不清楚。如果没有,您必须更新 updates
中的路径。
关于javascript - 更改 Firebase 中元素的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55205485/