У меня есть приложение, в котором пользователь может создавать списки.
Пользователь может обмениваться списком с другими пользователями. Мне уже удалось создать часть совместного доступа, у меня возникают проблемы с частью удаления. Я хочу, чтобы, когда пользователь удаляет список, который является общим, этот список также удаляется от других пользователей.
Это удаление будет производиться только владельцем списка.
Таким образом, сценарий будет:
Так что в моем
Итак, у меня есть эта схема:
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. Сначала вы должны получить элементы (или только их идентификаторы), соответствующие условию, а затем удалить их.
Однако вы можете удалить сам список и все ссылки на него за один раз, используя обновление с несколькими путями.
Я также рекомендую хранить список всех UID, с которыми вы поделились определенным списком, так что вам не нужно перебирать всех пользователей. Удержание отношений "многие ко многим" в обоих направлениях довольно распространено в Firebase и других базах данных NoSQL.
Подробнее см.