# #angular #firebase #firebase-realtime-database #angularfire2
Вопрос:
Допустим, у меня есть коллекция Evaluation
объектов, определенных следующим образом :
{
"category": "category A",
"question": {
"text": "Question 1?"
}
}
Эти объекты хранятся в AngularFireList
базе данных в реальном времени Firebase по следующему пути interview-question/carrer
:
Теперь… предположим, мне нужно удалить все вопросы в одной категории, я ожидаю, что следующий код сделает то, что мне нужно :
this.db
.list<Evaluation>(
`interview-questions/${this.type}`,
ref => ref.orderByChild('category').equalTo(currentCategory))
.remove();
Но эта строка кода удаляет все вопросы по всем категориям, а не только по currentCategory
тем, которые требуются для фильтра. Я смог подтвердить, что запрос, который я использую в list<>()
методе, работает, так как этот код отображает все вопросы для этой категории, а не для других :
this.db
.list<Evaluation>(
`interview-questions/${this.type}`,
ref => ref.orderByChild('category').equalTo(currentCategory))
.valueChanges()
.subscribe(evaluations => console.log(evaluations));
Смотрите результат в моей консоли при попытке удалить все вопросы в разделе Category A
:
Есть ли способ удалить элементы из an AngularFireList
, предоставив фильтр, как это сделал я, чтобы мне не приходилось вызывать remove()
каждый объект?
*** ПРАВКА 1 ***
Оказывается, этот код ведет себя точно так же. Он также удаляет все записи без учета фильтра :
removeCategoryQuestions(currentCategory: string) {
this.db
.list<Evaluation>(
`interview-questions/${this.type}`)
.query
.orderByChild('category')
.equalTo(currentCategory)
.ref
.remove();
}
*** EDIT 2 ***
Before someone posts this solution as an answer, I also tried this piece of code :
removeCategoryQuestions(currentCategory: string) {
const categoryEvaluations = (this.categoriesEvaluations[currentCategory] ?? []) as Evaluation[];
categoryEvaluations
.map(evaluation => evaluation.key)
.filter(evaluationKey => evaluationKey != null)
.forEach(evaluationKey => this.evaluationsRef.remove(evaluationKey));
}
The problem with this solution is that my subscription is called once for each question deleted which is not acceptable.