gpt4 book ai didi

javascript - 如何从 Firebase 中的 child 中删除特定的 child

转载 作者:行者123 更新时间:2023-11-30 09:31:12 26 4
gpt4 key购买 nike

我有一个应用程序,用户可以在其中创建列表。

用户可以与其他用户共享列表。我已经设法创建了共享部分,我遇到的问题是删除部分。我希望当用户删除共享列表时,该列表也会从其他用户中删除。

此删除将仅由列表所有者进行。

那么一个场景将是:

  • 用户 A 创建了一个 pushID = 1 的列表。
  • 此列表添加到以下 firebase ref 中:/userList/$userAID/$pushID。
  • 用户 A 与用户 B 和用户 C 共享列表。
  • 此列表已添加到以下 firebase ref 中:/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 子项的 key 。在这个节点中,我再次设法跳转到 pushID 中,在那里我进行验证以检查当前键是否等于我要删除的列表的 UID,如果是,我将执行 remove()。

我觉得一定有更好的方法告诉 Firebase 直接转到 pushID 并找到所有与我要删除的列表的 UID 相同的那些,然后再执行。

最佳答案

无法根据 Firebase 数据库的条件在服务器端删除多个项目。您必须首先检索与条件匹配的项(或仅检索它们的 ID),然后删除它们。

但是,您可以使用多路径更新一次性删除列表本身和所有对它的引用。

我还建议保留一份您与之共享特定列表的所有 UID 的列表,这样您就不必遍历所有用户。在两个方向上保持多对多关系在 Firebase 和其他 NoSQL 数据库中很常见。

更多请看:

关于javascript - 如何从 Firebase 中的 child 中删除特定的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46147316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com