# #angular #google-cloud-firestore #angularfire2 #angularfire
Вопрос:
Используя AngularFire, допустим, я хочу заказать «год», а затем «бренд». Это можно сделать в Firebase с помощью:
Query query = cities.orderBy("state").orderBy("population", Direction.DESCENDING);
Но я не вижу способа сделать это с помощью AngularFire orderBy
. Я ожидал бы, что что-то подобное сработает, но это выдает ошибку ERROR TypeError: Cannot read properties of undefined (reading 'length')
:
... this.db .collection('myCollection', (ref) =gt; ref.orderBy('year').orderBy('brand')) .snapshotChanges() ...
Можно ли заказать то одно, то другое, используя AngularFire?
ИЗМЕНИТЬ: Вот полный метод:
fetchBaseballCards(uid: any) { this.uiService.loadingStateChanged.next(true); this.fbSubs.push( this.db .collection(uid, (ref) =gt; ref.orderBy('year').orderBy('brand')) .snapshotChanges() .pipe( map((docArray) =gt; { return docArray.map((doc: any) =gt; { return { id: doc.payload.doc.id, brand: doc.payload.doc.data().brand, buyDate: doc.payload.doc.data().buyDate, buyPrice: doc.payload.doc.data().buyPrice, cardNumber: doc.payload.doc.data().cardNumber, firstName: doc.payload.doc.data().firstName, grade: doc.payload.doc.data().grade, inventoryId: doc.payload.doc.data().inventoryId, lastName: doc.payload.doc.data().lastName, sellingPrice: doc.payload.doc.data().sellingPrice, soldDate: doc.payload.doc.data().soldDate, soldPrice: doc.payload.doc.data().soldPrice, year: doc.payload.doc.data().year, }; }); }) ) .subscribe( (cards: any) =gt; { this.uiService.loadingStateChanged.next(false); this.baseballCards = cards; this.baseballCardsChanged.next([...this.baseballCards]); }, (err) =gt; { this.uiService.loadingStateChanged.next(false); this.uiService.showSnackbar('Fetching Cards failed, please try again later', undefined, 3000); this.baseballCardsChanged.next(undefined); } ) ); }
и полное сообщение об ошибке:
ERROR TypeError: Cannot read properties of undefined (reading 'length') at MatTableDataSource._filterData (table.js:724) at MapSubscriber.project (table.js:701) at MapSubscriber._next (map.js:29) at MapSubscriber.next (Subscriber.js:49) at CombineLatestSubscriber.notifyNext (combineLatest.js:73) at InnerSubscriber._next (InnerSubscriber.js:11) at InnerSubscriber.next (Subscriber.js:49) at BehaviorSubject.next (Subject.js:39) at BehaviorSubject.next (BehaviorSubject.js:30) at MatTableDataSource.set data [as data] (table.js:635)
Комментарии:
1. Да, AngularFire поддерживает несколько
orderBy
запросов. Для этого вам необходимо создать индекс в firestore. Ошибка, которую вы получаете, указывает на то, что где-то запрос дает неопределенное значение. Можете ли вы поделиться всем кодом?2. Я добавил полный метод выше.
3. Знаете ли вы, из какой строки кода исходит ошибка? Если нет, можете ли вы сузить круг ошибок, добавив инструкции console.log ()? Также, что есть в базе данных Firestore?