‫Instrutor: Como o próximo recurso em
‫nossa API, temos a
‫limitação de campo, basicamente, para permitir que
‫os clientes escolham quais
‫campos desejam obter na resposta.
‫Portanto, para um cliente, é sempre ideal
‫receber o mínimo de dados possível, a
‫fim de reduzir a largura
‫de banda que é consumida a cada solicitação.
‫E isso, é claro, é
‫especialmente verdadeiro quando temos conjuntos de dados com muitos dados, certo?
‫E, portanto, é um recurso
‫muito bom permitir que o usuário da API solicite apenas alguns dos campos.
‫Assim, como terceiro recurso, teremos a limitação de campo.
‫E, assim como antes, deixe-me começar mostrando
‫como vai funcionar aqui no Postman.
‫Então, vamos especificar um campo chamado fields e, em seguida,
‫o nome dos
‫campos que realmente queremos receber.
‫Então, digamos que queremos
‫apenas o
‫nome, a duração, a dificuldade e o preço, tudo bem.
‫E assim, a implementação será realmente muito semelhante ao que
‫fizemos antes com a classificação.
‫Então, se req. inquerir. campos, então vamos,
‫na verdade, novamente, criar
‫uma variável para esses campos aqui porque, assim como antes,
‫Mongodbs, na verdade solicita uma string
‫com o nome do campo separado por espaços, certo?
‫Agora, deixe-me começar
‫escrevendo essa parte, ok, então, a própria consulta.
‫Portanto, consulta é igual a consulta. selecione, ok?
‫E aqui, por exemplo, ele espera uma
‫string como, nome e espaço, duração e um preço por exemplo, ok.
‫E assim, ele vai selecionar
‫apenas esses três nomes de campo
‫e devolver o resultado contendo apenas isso, ok?
‫E, na verdade, essa operação
‫de selecionar apenas determinados nomes de campo é chamada de projeção, ok?
‫Então, vamos prosseguir e
‫criar basicamente a string, exatamente como fizemos lá em cima.
‫Então, começamos com req. inquerir. campos, então nós o dividimos
‫por uma vírgula, e
‫juntamos com uma string vazia.
‫Com um espaço, na verdade, desculpe.
‫Então, com o espaço
‫e isso, vamos produzir essa string exata com esse formato exato.
‫Então, aqui, tudo o que precisamos fazer é usar esses campos.
‫Então, como antes, eu também quero
‫adicionar um padrão, então caso o usuário não
‫especifique o campo dos campos, ok, então,
‫nesse caso, vamos apenas remover algo de fato, ok?
‫E deixe-me mostrar isso a você primeiro, então aqui embaixo,
‫sempre temos esse sublinhado sublinhado V, que é definido
‫como zero, e o Mongodbs apenas cria esses campos
‫porque os usa internamente.
‫E poderíamos desativá-los, mas essa não é uma boa prática.
‫Novamente, porque o Mongodbs realmente os usa, tudo bem,
‫mas o que podemos fazer é
‫basicamente nunca enviá-los ao cliente, portanto, podemos excluí-los.
‫E a maneira como fazemos isso é, em vez de
‫fazer o sublinhado e o sublinhado V,
‫como antes, então, como fizemos
‫aqui, basicamente, apenas prefixamos com um menos, ok?
‫E menos significa então não incluir, mas excluir.
‫Então, o que tínhamos antes
‫aqui novamente, com o nome, a duração
‫e o preço, era incluir esses campos na resposta.
‫Mas desta forma, com
‫o menos, temos tudo exceto o campo V aqui, ok?
‫Então, estamos excluindo apenas este campo, certo?
‫Então, vamos testar isso.
‫Envie, e vamos aguardar e sim, de fato, o ID é
‫por padrão, sempre incluindo ok?
‫Então, não podemos remover isso, mas além disso,
‫temos apenas o nome, a duração, a dificuldade e
‫o preço, ok, e poderíamos, é claro, também usar esse
‫menos para essa exclusão aqui também.
‫Então poderíamos ter tudo, menos o nome e
‫menos a duração, por exemplo.
‫Então, vamos testar isso também.
‫E assim, se você verificar agora, você não verá o nome, e
‫não verá a duração em nenhum lugar aqui.
‫Certo, e agora apenas como um
‫teste final, vamos ver se nosso padrão funciona bem.
‫Enviando a resposta e então, agora não temos
‫mais aquela variável V aqui definida como zero em todos os documentos.
‫Certo, ótimo, agora há uma última coisa que eu
‫quero mostrar a
‫você, que também podemos excluir campos diretamente do esquema.
‫Tudo bem, e isso pode
‫ser muito útil, por exemplo, quando temos
‫dados confidenciais que só devem ser usados internamente.
‫Por exemplo, coisas
‫como senhas nunca devem ser expostas ao
‫cliente e, portanto, podemos
‫excluir alguns campos diretamente no esquema.
‫Portanto, por exemplo, podemos não querer que
‫o usuário veja exatamente quando cada tour foi criado.
‫Por exemplo, o passeio pode
‫já ser meio
‫antigo ou algo assim e, então, digamos que queremos sempre ocultar
‫esse campo createdAt, certo, então podemos
‫entrar em nosso esquema, que está
‫no modelo de passeio, é claro, e então
‫em createdAt, simplesmente definimos a propriedade select aqui como false.
‫E agora, quando tentamos obter nossos resultados, você vê que na
‫verdade não está mais lá, certo?
‫E assim,
‫podemos basicamente, ocultar permanentemente isso da saída.
‫Perfeito, é mais um recurso que está realmente funcionando agora e
‫vamos seguir direto para o próximo.