Возможны ли несколько заказов в магазине Angularfire Firestore? (например: штаты по возрастанию, затем города по возрастанию)

# #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?