У меня есть 2 наблюдаемых, исходящих от firebase с angularfire и использующих структуры rx js
private boatsCollection: AngularFirestoreCollection<Boat>;
boats: Observable<Boat[]>;
private bookingsCollection: AngularFirestoreCollection<Booking>;
bookings: Observable<Booking[]>;
, но bookings
документы коллекции имеют ID'S
, содержащие информацию о boat
(так что лодка id
)
Я хочу отфильтровать лодки и оставить только те документы, идентификаторы которых не совпадают с документами сбора бронирований ID
значением.
Как этого можно достичь с помощью rx js?
ngOnInit() {
// Subscribe to route params and get user's selected date
this.sub = this.route.params.subscribe(params => {
this.date = Number (params['date']);
// get bookings where selected date exits
this.bookingsCollection = this.afs.collection<Booking>('bookings', ref => ref.where('date', '==', this.date));
this.bookings = this.bookingsCollection.valueChanges({ idField: 'id' });
// Boats Collection
this.boatsCollection = this.afs.collection<Boat>('boats');
this.boats = this.boatsCollection.valueChanges({ idField: 'id' });
combineLatest(this.boats, this.bookings).subscribe(
([boats, bookings]) => {
const bookingIds = bookings.map(booking => booking.boatID);
const filteredBoats = boats.filter(boat => !(bookingIds.includes(boat.id)));
console.log(filteredBoats);
},
);
});
}