【发布时间】:2017-09-11 02:11:18
【问题描述】:
我有一个应用程序,用户可以在其中创建列表。
用户可以与其他用户共享列表。我已经设法创建了共享部分,我遇到的问题是删除部分。我希望当用户删除共享列表时,该列表也会从其他用户中删除。
此删除将仅由列表所有者进行。
所以一个场景是:
- 用户 A 创建一个 pushID = 1 的列表。
- 此列表已添加到以下 Firebase 引用中:/userList/$userAID/$pushID。
- 用户 A 与用户 B 和用户 C 共享列表。
- 此列表已添加到以下 Firebase 引用中:/userList/$userBID/$pushID 和 /userList/$userCID/$pushID。
- 用户 A 删除 pushID = 1 的列表。
所以在我的
所以我有这个架构:
userList: {
2xYnKcZFEdPYWfUJ3E63yQEDShe2: {
-Kt7lXiY0Yt-oDcV38L5
}
KtQHkXMSwKSByZ1rmTRwjDmSYnE3: {
-Kt7lXiY0Yt-oDcV38L5: {}
-Kt9XP91hjwcwgcBSgbc: {}
}
XHpMVoRqcCdzwTP70L29Lza1ibD3: {
-Kt7lXiY0Yt-oDcV38L5: {}
}
}
在高级情况下,这将是:
userList: {
userID: (A) {
-listID : (1) {}
}
userID: (B) {
-listID: (1) {}
-listID: (2) {}
}
userID: (C) {
-listID: (1) {}
-listID: (3) {}
-listID: (4) {}
}
}
我必须这样做的当前代码如下:
const ref = firebase.database().ref('userList');
ref.once('value')
.then((snapshot) => {
snapshot.forEach((childSnapshot) => {
ref.child(childSnapshot.key)
.once('value')
.then((snapshot2) => {
snapshot2.forEach((childSnapshot2) => {
if (childSnapshot2.key === uid) {
ref.child(childSnapshot2.key)
.remove();
}
});
})
.catch(() => {
console.log('error2');
});
});
})
.catch((error) => {
console.log(error);
});
我在这段代码中所做的是,首先获取 userList 中的所有列表,通过获取我设法跳转到 userID 子项的键。在这个节点内,我再次设法跳转到 pushID 内部,在那里我验证检查当前键是否等于我要删除的列表的 UID,如果是,我执行 remove()。
我觉得必须有更好的方法告诉 Firebase 直接去 pushID 并找到所有与我要删除的列表的 UID 相同的那些,然后执行它。
【问题讨论】:
-
我正在寻找类似的东西:firebase.database().ref('userList').child().child(uid).remove();我知道 child() 不能为空。但类似的事情
标签: javascript firebase firebase-realtime-database