typescript - Como posso ordenar por um elemento de array com Angular
Eu tenho este documento do Firebase, e quero ordenar pelo campo de texto do primeiro elemento do array name, ou seja, o nome oficial.
Aqui está o código que estou tentando usar, mas não está funcionando:
get(collectionName: string): Observable<T[]> {
return this.afs.collection(collectionName, ref => {
let query: CollectionReference | Query = ref;
query = query.orderBy('text', 'asc').where('name', 'array-contains', 'official');
return query;
}).valueChanges() as Observable<T[]>;
}
Resposta #1
Consultar e ordenar por valores de objetos dentro de arrays não é possível com o Firestore, pelo menos não diretamente, como você pode ver nesta resposta da comunidade:
As operações
array-containsverificam se um array contém um valor específico (completo). Elas não podem verificar se um array de objetos contém um item com um valor específico para uma propriedade.
O mesmo se aplica ao orderBy. Então, para fazer isso, você precisará mudar a estrutura do seu Firestore, uma possibilidade é criar um campo separado que não seja um array e que contenha o valor pelo qual a consulta deve ser ordenada/consultada, você também pode criar uma subcoleção para representar os valores do array, mas isso cabe a você decidir dependendo da sua estrutura.
