‫Instrutor: Agora vamos implementar a classificação de resultados.
‫Para permitir que nossos usuários classifiquem o resultado com base
‫em um determinado campo.
‫Então, vamos agora dar uma olhada em todos os nossos resultados aqui por enquanto.
‫Tudo bem, digamos que realmente
‫desejamos classificar esses resultados, digamos por preço.
‫Ok, começando com o preço mais baixo e depois
‫subindo até o preço mais alto.
‫Tudo bem, então temos todos os tipos de preços.
‫397, 497, 1197, 1497, 997.
‫Temos quase 3.000 aqui.
‫Então 1497 e então eles não estão realmente em ordem, então
‫vamos permitir que o usuário basicamente classifique esses resultados com base em um campo
‫que pode ser passado usando a string de consulta.
‫Digamos que desejamos classificar por preço.
‫Tudo bem.
‫Então, se rodarmos agora, é claro,
‫nada acontecerá, ele ainda mostrará
‫exatamente os mesmos nove resultados e na mesma ordem, porque
‫antes, na última aula, filtramos basicamente este campo de classificação.
‫Direito?
‫E agora vamos realmente usar isso.
‫Tudo bem?
‫Portanto, lembre-se de como criamos o objeto de consulta e,
‫em seguida, excluímos o campo de classificação
‫aqui, para que ele não poluísse nossa filtragem, certo?
‫Mas agora nós realmente precisamos dele e vamos usá-lo agora.
‫Portanto, o terceiro recurso aqui é a classificação.
‫Ou, na verdade, bem,
‫esse é o segundo, então vamos chamá-lo de 1A e 1B.
‫Tudo bem?
‫Então, digamos que se realmente houver um tipo, pedido de
‫tipo. inquerir. organizar.
‫Ok, e você vê isso aqui.
‫Agora sumiu por causa desse erro aqui, mas de qualquer maneira.
‫Obviamente, em nossa última
‫solicitação, há um objeto de consulta
‫aqui e, portanto, tínhamos a propriedade sort, certo?
‫E se houver uma propriedade
‫de classificação, bem, isso
‫significa que queremos realmente classificar os resultados com base no valor.
‫Agora, uma coisa rápida que
‫precisamos fazer é mudar esta consulta de
‫variável aqui de uma constante para uma variável normal.
‫Então vamos, ok?
‫Porque agora nós realmente queremos acorrentar algo
‫a esta consulta.
‫Portanto, a nova consulta será consulta. organizar.
‫E queremos classificá-lo por req. inquerir. organizar.
‫Tudo bem, porque esse será o valor do campo, então,
‫neste caso, preço, e o
‫Mongoose irá classificar automaticamente o resultado com
‫base no preço.
‫E agora, caso você esteja
‫se perguntando, por que funciona assim, então por que
‫fizemos isso aqui, lembre-se do que conversamos nas últimas palestras.
‫Então, lembre-se de como é esse passeio. find here
‫irá retornar uma consulta, certo?
‫E então armazenamos esse objeto de consulta
‫aqui nesta variável, para que mais
‫tarde possamos continuar a encadear mais métodos a ele.
‫Portanto, mais desses métodos estão disponíveis
‫em todos os documentos criados por meio da classe de consulta.
‫Ok, lembra disso?
‫Acho que conversamos sobre isso em profundidade há duas palestras.
‫Caso isso ainda esteja um pouco confuso para você,
‫é só voltar
‫lá ou você também pode dar uma olhada na documentação, certo?
‫Agora vamos realmente testar isso.
‫Portanto, a classificação ainda está definida para o preço.
‫Vou mandar agora.
‫Vamos dar uma olhada no resultado.
‫E de fato começamos com o preço mais baixo,
‫mas acho que já tínhamos isso antes.
‫Então, começamos com 397, depois 497, 997, 1197, 1497
‫e você vê que os preços continuam aumentando.
‫Então, 1997, 2997.
‫E então, sim, na verdade, eles agora estão classificados.
‫OK?
‫Então, nós os classificamos pelo preço em ordem crescente.
‫Mas também podemos classificá-los em ordem decrescente.
‫É muito simples.
‫Tudo o que precisamos fazer é definir como menos aqui.
‫Portanto, menos o preço e o Mongoose os classificará
‫automaticamente na outra ordem.
‫Portanto, em ordem decrescente.
‫Então, vamos testar esse também.
‫E agora devemos começar com, sim,
‫exatamente, com este.
‫Então, o primeiro agora
‫é o mais alto e o último é o 397.
‫Legal.
‫Mas podemos realmente dar um passo adiante, porque
‫temos muitos casos aqui que têm o mesmo preço.
‫Mas como esses resultados com o mesmo preço
‫são ordenados dentro deles?
‫Digamos que temos este com este preço
‫e este com o mesmo preço.
‫Então, por que este aparece antes do segundo?
‫A mesma coisa com este aqui, talvez,
‫na verdade não.
‫Portanto, este é apenas o único com 1997.
‫Mas aqui novamente temos esses dois com o mesmo preço.
‫Nós temos, ok, eles são todos diferentes.
‫Ok, esses são todos diferentes.
‫Mas queremos classificá-los, basicamente, de acordo
‫com um segundo critério.
‫Portanto, no caso de haver um
‫empate, queremos um segundo campo
‫pelo qual podemos classificar onde o primeiro é o mesmo.
‫Portanto, neste caso, o preço.
‫Então no Mongoose isso é bem fácil, e
‫deixe-me mostrar isso para você aqui como um comentário, por exemplo.
‫Então, no Mongoose, diríamos apenas sort e agora
‫temos o preço, então o temos assim, mas
‫no Mongoose tudo
‫o que precisamos fazer
‫é adicionar outro nome de campo à string.
‫Então, por exemplo, média de classificação.
‫Ou acho que são as classificações.
‫Ok, agora queremos passar este campo aqui também para o
‫nosso tipo.
‫OK?
‫Agora não podemos deixar um espaço aqui na URL e,
‫em vez disso, vamos adicionar uma vírgula.
‫OK?
‫Portanto, queremos classificar primeiro por preço
‫e, em seguida, como um segundo critério, também pela média de avaliações.
‫OK?
‫E agora tudo o
‫que precisamos fazer é basicamente substituir essa vírgula por um espaço.
‫Tudo bem?
‫E, claro, poderíamos ter
‫ainda mais campos pelos quais classificamos.
‫OK?
‫Mas, por enquanto, vamos
‫deixar assim e implementar muito rapidamente em nosso código.
‫Tudo bem?
‫E, na verdade, deixe-me criar uma nova variável aqui.
‫Vamos classificar por.
‫E então temos req. inquerir. classificar e o
‫que vamos fazer agora é dividi-lo por vírgula.
‫Então divida a string por vírgula, e isso irá retornar um array de
‫todas as strings, todos os nomes
‫de campo, e
‫então tudo o que temos a fazer é juntá-lo
‫novamente usando join, e como string de junção usamos um espaço.
‫Tudo bem?
‫E apenas para ter certeza de que está correto.
‫Console. log, classificar por e, claro,
‫aqui queremos usar essa classificação por variável.
‫OK?
‫Então, vamos dar uma olhada nisso.
‫E.
‫Portanto, 4. 7 aqui, e o outro também tem 4. 7, certo?
‫Então, vamos usar nossa API para alterar a
‫média das classificações aqui.
‫OK?
‫Então, apenas como uma
‫experiência divertida, vamos copiar este ID aqui, em seguida, atualizar o tour e,
‫portanto, vamos ao corpo e, portanto, quero atualizar
‫a média das classificações para 4. 9
‫OK?
‫Vamos enviar e, de fato, você verá que foi atualizado.
‫E agora vamos mudar isso de novo, ou
‫vamos tentar de novo, na verdade.
‫E agora você vê que o primeiro ainda tem 4. 7 e este
‫aqui agora tem 4. 9
‫E agora eles são ordenados com uma classificação crescente.
‫Direito?
‫E, claro, poderíamos colocar um menos aqui
‫e então eles deveriam mudar de posição, o que
‫significa que aquele com 4. 9 deve aparecer primeiro.
‫Vamos tentar isso também.
‫E sim, de fato.
‫Então agora este, o tour dos amantes do
‫esporte, é o que aparece primeiro.
‫Certo, ótimo.
‫Parece que está funcionando.
‫Vamos dar uma olhada em nossos resultados aqui.
‫E sim, de fato.
‫E vamos apenas dar uma olhada no que
‫registramos aqui no console.
‫E então, sim, este é o nosso tipo por variável, que sim.
‫Que tipo de parece semelhante ao que temos aqui.
‫E então esse foi o objetivo de criar essa variável.
‫Ótimo, agora está funcionando.
‫Vamos nos livrar deste console e deste aqui também.
‫E tudo bem.
‫E só
‫para terminar, vamos adicionar um padrão.
‫E fazemos isso simplesmente adicionando um bloco else aqui.
‫Portanto, caso o usuário não especifique nenhum campo
‫de classificação na string de consulta da URL, ainda
‫assim iremos adicionar uma classificação à consulta.
‫Portanto, consulte. classificar e então
‫classificaremos pelo campo de adição criado, certo?
‫E, na verdade, em ordem
‫decrescente, para que os mais novos apareçam primeiro.
‫Então, menos criado em.
‫Tudo bem?
‫Dê uma chance a isso.
‫E então sim, eu penso assim, terminamos.
‫Vamos apenas desligar essa opção aqui também.
‫E agora estamos de volta ao nosso URL normal, sem
‫nenhuma string de consulta.
‫E então vamos dar
‫uma olhada se isso agora está realmente ordenado pelo criado em.
‫Portanto, este aqui termina em 59 segundos e 30.
‫5930 também.
‫E sim.
‫Então, eles foram criados exatamente
‫no mesmo momento, porque importamos todos ao mesmo tempo.
‫Tudo bem?
‫E, portanto, neste caso, não podemos realmente ver
‫o efeito desse trecho de código que acabamos
‫de adicionar aqui, mas no caso de esses documentos terem
‫sido adicionados em momentos diferentes, eles
‫agora seriam ordenados pela data em que foram criados.
‫Tudo bem?
‫Então é isso para classificação.
‫A seguir, vamos falar sobre como limitar os campos que
‫queremos em nossos resultados.