Operadores condicionais do MongoDB especificar uma condição à qual o valor do campo do documento deve corresponder.
Operadores de consulta de comparação
- $eq (igual)
- $ne (não igual)
- $gt (mais de)
- $lt (menor que)
- $gte (mais ou igual)
- $lte (menor ou igual)
- $in define um array de valores, um dos quais deve ter um campo de documento
- $nin define um array de valores que não deve ter um campo de documento
Por exemplo, encontraremos todos os documentos com o valor da chave de idade inferior a 30:
db.users.find ({age: {$lt : 30}})
O uso de outros operadores de comparação será semelhante. Por exemplo, a mesma chave, apenas com mais de 30:
db.users.find ({age: {$gt : 30}})
Observe que a comparação aqui é feita em tipos inteiros, não em strings. Se a idade da chave representa valores de string, a comparação deve ser feita nas linhas:db.users.find ({age:{$gt :“30”}}), mas o resultado será o mesmo.
Mas vamos imaginar uma situação em que temos que encontrar todos os volumes com um valor de campo age maior que 30 mas menor que 50. Nesse caso, podemos combinar dois operadores:
db.users.find ({age: {$gt : 30, $lt: 50}})
Encontraremos usuários com 22 anos de idade:
db.users.find ({age: {$eq : 22}})
Em essência, esta é a analogia da próxima consulta:
db.users.find ({age: 22})
Operação reversa – encontre usuários cuja idade NÃO seja 22:
db.users.find ({age: {$ne : 22}})
O operador $in define um array de expressões possíveis e procura aquelas chaves cujo valor está no array:
db.users.find ({age: {$in : [22, 32]}})
Ao contrário, o operador $nin define um array de expressões possíveis e busca aquelas chaves cujo valor está ausente neste array:
db.users.find ({idade:{$nin :[22, 32]}})
Operadores lógicos
Os operadores lógicos são executados em condições de amostragem:
- $ou :conecta duas condições e o documento deve atender a uma dessas condições
- $ e: conecta duas condições e o documento deve atender a ambas as condições
- $não: o documento NÃO deve corresponder à condição
- $nor: conecta duas condições e o documento NÃO deve atender a ambas as condições
Operadores de amostra do MongoDB
O operador $or representa uma operação OR lógica e define um conjunto de pares de valores-chave que devem estar presentes em um documento. E se um documento possui pelo menos um par chave-valor, ele corresponde a esta consulta e é extraído do banco de dados:
db.users.find ({$or : [{name: "Tom"}, {age: 22}]})
Esta expressão retornará todos os documentos com nome=Tom ou idade=22.
Outro exemplo retornará todos os documentos com nome=Tom e idade=22 ou com “alemão” entre os valores de idioma:
db.users.find ({name: "Tom", $or : [{age: 22}, {languages: "german"}]})
Os operadores condicionais podem ser usados em subexpressões ou subexpressões:
db.users.find ({$or : [{name: "Tom"}, {age: {$gte:30}}]})
Neste caso, selecionamos todos os documentos onde nome=”Tom” ou o campo idade tem valor igual ou superior a 30.
Operador $e
O operador $and representa uma operação lógica AND (multiplicação lógica) e define um conjunto de critérios que um documento deve atender. Ao contrário do operador $or, o documento deve atender a todos os critérios especificados. Por exemplo:
db.users.find ({$and : [{name: "Tom"}, {age: 32}]})
Aqui os documentos selecionados devem ter o nome Tom e idade 32 – ambas características.
Pesquisa de matriz MongoDB
Alguns operadores são projetados para trabalhar com matrizes:
- $todos: define um conjunto de valores que devem existir em um array
- $size: define o número de elementos que devem estar em um array
- $elemMatch: especifica a condição à qual os elementos na matriz devem corresponder
MongoDB $all
O operador $all define uma matriz de expressões possíveis e exige que os documentos tenham todo o conjunto definido de expressões. Assim, ele é usado para pesquisar a matriz. Por exemplo, os documentos têm uma matriz de idiomas que armazena os idiomas estrangeiros falados pelo usuário. E para encontrar todas as pessoas que falam inglês e francês ao mesmo tempo, podemos usar a seguinte expressão:
db.users.find ({languages: {$all : ["english", "french"]}})
Operador $elemMatch
O operador $elemMatch permite selecionar documentos nos quais as matrizes contêm elementos que se enquadram em determinadas condições. Por exemplo, deixe que o banco de dados contenha uma coleção de classificações de usuários para cursos específicos. Vamos adicionar alguns documentos:
db.grades.insertMany([{student: "Tom", courses:[{name: "Java", grade: 5}, {name: "MongoDB", grade: 4}]},
{student: "Alice", courses:[{name: "C++", grade: 3}, {name: "MongoDB", grade: 5}]}))
Cada documento tem uma matriz, que por sua vez consiste em documentos aninhados.
Agora vamos encontrar alunos com nota acima de 3 para o curso MongoDB:
db.grades.find({courses: {$elemMatch: {name: "MongoDB", grade: {$gt: 3}}}})
Operador $size
O operador $size é usado para localizar documentos nos quais os arrays possuem um número de elementos igual ao valor de $size. Por exemplo, vamos extrair todos os documentos onde há dois elementos no array laguages:
db.users.find ({languages: {$size:2}})
Tal consulta corresponderá, por exemplo, ao seguinte documento:
{"name": "Tom", "age": 32, languages: ["english", "german"]}
Operador $existe
O operador $exists permite extrair apenas os documentos onde uma determinada chave está presente ou ausente. Por exemplo, retorne todos os documentos que contêm a chave da empresa:
db.users.find ({company: {$exists:true}})
Se especificarmos $exists como o parâmetro false, a consulta nos retornará apenas os documentos que não contêm a chave da empresa.
Operador $type
O operador $type extrai apenas os documentos em que uma determinada chave possui um valor de um determinado tipo, por exemplo, uma string ou um número:
db.users.find ({age: {$type: "string"}})
> db.users.find ({age: {$type: "number"}})
Operador $regex
O operador $regex especifica uma expressão regular à qual o valor do campo deve corresponder . Por exemplo, deixe que o nome do campo tenha necessariamente a letra “b”:
db.users.find ({name: {$regex: "b"}})
É importante entender que $regex não aceita apenas strings, mas expressões regulares, por exemplo:name:{$regex:“om$”} – o valor de name deve terminar com “om”.