Как удалить несколько документов с определенным значением в FireStore - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь удалить много документов с определенным значением 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();
  }

Есть две проблемы:

  1. машинопись показывает ошибку для автомобиля в batch.delete(car);

    Аргумент типа 'QueryDocumentSnapshot' не может быть назначен параметру типа 'DocumentReference'.Свойство 'firestore' отсутствует в типе 'QueryDocumentSnapshot'.

  2. Если, например, есть два автомобиля, и у каждого разный идентификатор категории, то 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());
  }
...