Angular 7 и firestore, получают данные из другой коллекции, которые соответствуют каждому документу в другой коллекции - PullRequest
0 голосов
/ 07 февраля 2019

Что я пытаюсь сделать, перечислить оборудование, принадлежащее каждому клиенту.

Я прочитал, посмотрел видео, скопировал и вставил результат, но ничего не работает, и у меня кружится голова.

Мне нужны идентификаторы для каждого клиента и оборудования, поэтому я получаю их вот так

fetchJobs() {
  this.todoCollectionRef = this.afs.collection('clients');
  this.todo$ = this.todoCollectionRef.snapshotChanges().pipe(map(actions => {
    return actions.map(action => {
      const data = action.payload.doc.data() as Todo;
      const id = action.payload.doc.id;
      return {
        id,
        data
      };
    });
  }));

}


fetchEquipment() {
  this.equipmentCollectionRef = this.afs.collection('equipment');
  this.equipment$ = this.equipmentCollectionRef.snapshotChanges().pipe(map(actions => {
    return actions.map(action => {
      const data = action.payload.doc.data() as Equipment;
      const id = action.payload.doc.id;
      return {
        id,
        data
      };
    });
  }));

}

Я также пытался переосмыслить свою структуру данных, но поскольку у каждого клиента будет несколько элементов, а не все одинаковое количество, я пробовал использовать массивы с картами, ноневозможно обновить детали.

Если кто-то может указать мне правильное направление, я буду благодарен.

Screenshot

Я думаю, что янужно что-то вроде этого ..

  this.todoCollectionRef = this.afs.collection('clients');
    this.todo$ = this.todoCollectionRef.snapshotChanges().pipe(map(actions => {
      return actions.map(action => {
        const data = action.payload.doc.data() as Todo;
        const id = action.payload.doc.id;
        return this.afs.collection('equipment', ref => ref.where('client', '==', data.client)).valueChanges()
        .pipe(map(eqip => Object.assign({}, {id, data, eqip})));
    });

})).switchMap(observables => Observable.combineLatest(observables));

      }  
If anyone can help here I would be truly grateful.
And if someone could explain the code to help me and others learn.   

1 Ответ

0 голосов
/ 07 февраля 2019

С помощью функции fetchEquipement вы используете коллекцию 'client', которую вы должны использовать this.equipmentCollectionRef

...