Я пытаюсь удалить много документов с определенным значением categoryId из моей коллекции, но я думаю, что я делаю это неправильно, я думаю.
async deleteCol(id: string) {
const cars: firebase.firestore.QuerySnapshot
= await this.db.collection('cars', ref => ref.where('categoryId', '==', id)).ref.get();
const batch = this.db.firestore.batch();
cars.forEach(car => {
batch.delete(car);
});
batch.commit();
}
Есть две проблемы:
машинопись показывает ошибку для автомобиля в batch.delete(car);
Аргумент типа 'QueryDocumentSnapshot' не может быть назначен параметру типа 'DocumentReference'.Свойство 'firestore' отсутствует в типе 'QueryDocumentSnapshot'.
Если, например, есть два автомобиля, и у каждого разный идентификатор категории, то forEach
запускается дважды (для каждогодокумент, не для документа с определенным categoryId), но должен только один раз или, может быть, есть лучший и более простой способ удалить все документы по определенному условию?
ОБНОВЛЕНИЕ:
Хорошо, значит, эта версия работает:)
public async deleteCol(id: string): Promise<void> {
const carsList: Observable<firestore.QuerySnapshot> = await this.db.collection('cars', ref => ref.where('categoryId', '==', id)).get();
const batch = this.db.firestore.batch();
carsList.pipe(
mergeMap(cars => cars.docs),
map((car: QueryDocumentSnapshot) => batch.delete(car.ref))
).toPromise().then(() => batch.commit());
}