DEV Community

Gabriel_Silvestre
Gabriel_Silvestre

Posted on • Updated on

MongoDB - Consulta em Arrays

Tabela de Conteúdos


Busca em Arrays

O que é?

É a possibilidade de buscar informações dentro de arrays que estão dentro de Documentos, podemos fazer isso através dos Operadores Lógicos e de Comparação, porém existem operadores específicos para tal tarefa, esses que serão abordados logo abaixo.

Quais são?

De acordo com a documentação oficial existem três operadores que realizam buscas dentro de arrays, são eles: $all, $elemMatch e $size. Cada um deles será explicado melhor logo abaixo.

Sintaxe

Por se tratar de um operador, a sintaxe básica segue a mesma dos outros operadores, com a única diferença que sempre estaremos buscando um valor dentro de um array, logo todo o campo que desejarmos filtrar deve ser um array.

Dentro de um parâmetro de filtro declaramos o operador e quais valores ele deve buscar, sendo que cada operador irá aceitar o valor em um formato diferente.

{ <campo>: { <operador>: <valor> } }
Enter fullscreen mode Exit fullscreen mode

$all

  • Função: retorna todos os Documentos em que o campo pesquisado seja um array com todos os valores definidos no filtro, independente se houver mais elementos ou a ordem estiver diferente.
{ foods: { $all: ["burger", "fries"] } }

# retorna todos os Documentos que possuam burger e fries no campo "foods"
Enter fullscreen mode Exit fullscreen mode

Voltar ao top

$elemMatch

  • Função: retorna todos os Documentos em que o campo pesquisado seja um array com ao menos um valor que satisfaça a condição estabelecida no filtro.
{ sales: { $elemMatch: { $gt: 40, $lt: 80 }} }  

# retorna todos os Documentos que possuam ao menos um valor maior que 40 e menor que 80 no campo "sales"
Enter fullscreen mode Exit fullscreen mode

Voltar ao top

$size

  • Função: retorna todos os Documentos em que o campo pesquisado seja um array com o tamanho especificado.
{ tags: { $size: 4 } }  

# retorna todos os Documentos que possuam exatamente 4 elementos dentro do campo "tags"

# não é possível buscar utilizar o $size junto de Operadores de Comparação,
# por exemplo: um array com MAIS DE dois elementos
Enter fullscreen mode Exit fullscreen mode

Voltar ao top


Busca de Avaliação

O que é?

Busca de Avaliação é a tradução livre de Evaluation Query Operators, que de forma simplificada, consiste em operadores que irão "avaliar" um campo específico de acordo com as regras exigidas.

Essa avaliação pode ser interna entre dois, ou mais campos, de um mesmo Documento, ou externa como os operadores vistos anteriormente.

Quais são?

Existem ao todo seis Evaluation Query Operators, porém aqui iremos abordar somente os operadores: expr, $regex e $mod.

Sintaxe

Cada Evaluation Query Operators possui uma sintaxe muito distinta, então iremos explicar a sintaxe de cada um individualmente.

$expr

  • Função: permite a comparação entre dois campos de um mesmo Documento, essa comparação é construída a partir de outros operadores, como os de comparação ou lógicos.

  • Sintaxe: declaramos o operador $expr, em seguida criamos a validação necessária e por fim dizemos os campos a serem comparados através de um array, esses campos devem receber um $ assim como os operadores.

{ $expr: { $gt: ["$credit", "$debit"] } }

# retorna todos os Documentos em que o campo "credit" seja maior que "debit"
Enter fullscreen mode Exit fullscreen mode

Voltar ao top

$regex

  • Função: permite a pesquisa de textos através de REGEX.

  • Sintaxe: declaramos o campo que desejamos realizar a busca, em seguida utilizamos o operador $regex com a REGEX a ser verificada.

{ title: { $regex: /Lord/i } }

# retorna todos os Documentos em que o campo "title" seja válido pela REGEX /lord/i
Enter fullscreen mode Exit fullscreen mode

Voltar ao top

$mod

  • Função: retorna todos os Documentos em que o campo selecionado dividido pelo valor declarado, resulte no módulo esperado.

  • Sintaxe: declaramos o campo que desejamos verificar, em seguida utilizamos o operador $mod e através de um array declaramos o divisor e o módulo esperado, respectivamente.

{ qty: { $mod: [2, 0] } }

# retorna todos os Documentos em que o campo "qty" dividido por 2, tenha um módulo igual a 0
Enter fullscreen mode Exit fullscreen mode

Voltar ao top


Links Úteis

Top comments (0)