MondoDB - Filter Operators
Gabriel_Silvestre
Posted on June 29, 2022
Tabela de Conteúdos
Operadores de Comparação
O que são?
São operadores utilizados para a comparação de valores, sendo normalmente aplicados a métodos para leitura, atualização ou exclusão de Documentos.
Sintaxe
Todos os Operadores de Comparação seguem a mesma estrutura base, indicamos o campo que queremos verificar, seguido do operador junto do valor.
{ <campo>: { <operador>: <valor> } }
Obs: Lembrando que esses operadores devem ser aplicados a métodos que suportem a aplicação de filtros, como o find()
, countDocuments()
ou o update()
.
Quais são?
$lt
- Tradução: Less than, em português Menor que.
O operador irá buscar todos os valores Menores que ...
{ age: { $lt: 20 } } # busca todos os Documentos com a propriedade "age" menor que 20
$lte
- Tradução: Less than or Equal, em português Menor ou Igual a.
O operador irá buscar todos os valores Menores ou Iguais a ...
{ price: { $lte: 29 } } # busca todos os Documentos com a propriedade "price" menor ou igual a 29
$gt
- Tradução: Greater than, em português Maior que.
O operador irá buscar todos os valores Maiores que ...
{ age: { $gt: 18 } } # busca todos os Documentos com a propriedade "age" maior que 18
$gte
- Tradução: Greater than or Equal, em português Maior ou Igual a.
O operador irá buscar todos os valores Maiores ou Iguais a ...
{ mana: { $gte: 400 } } # busca todos os Documentos com a propriedade "mana" maior ou igual a 400
$eq
- Tradução: Equal, em português Igual a.
O operador irá buscar todos os valores Iguais a ...
{ _id: { $eq: 2 } } # busca todos os Documentos com a propriedade "_id" igual a 2
{ _id: 2 } # podemos omitir o operador $eq de nosso filtro e o comportamento será o mesmo
$ne
- Tradução: Not Equal, em português Diferentes de.
O operador irá buscar todos os valores Diferentes de ...
{ class: { $ne: "Fighter" } } # busca todos os Documentos com a propriedade "class" diferente de Fighter
$in
- Tradução: In, em português Dentro de.
O operador irá buscar todos os valores Dentro de ...
{ country: { $in: ["BR", "USA", "CAN"] } } # busca todos os Documentos com a propriedade "country" dentro das seguintes opções BR, USA, CAN
$nin
- Tradução: Not In, em português Fora de.
O operador irá buscar todos os valores Fora de ...
{ country: { $nin: ["BR", "USA", "CAN"] } } # busca todos os Documentos com a propriedade "country" fora das seguintes opções BR, USA, CAN
Operadores Lógicos
O que são?
Assim como em linguagens de programação, os Operadores Lógicos do MongoDB realizam "inferências lógicas", exemplificando, podemos verificar se a condição X
E a condição Y
são verdadeiras, assim como também podemos verificar se ao menos uma delas é verdadeira através do OU.
Sintaxe
Assim como os Operadores de Comparação, os lógicos também devem ser utilizados somente nos métodos que aceitam algum tipo de filtro como parâmetro.
Há duas possíveis estruturas para os Operadores Lógicos, podemos ter uma estrutura simples, no qual não é possível concatenar verificações e estruturas mais complexas que suportam a concatenação de verificações.
O único Operador Lógico que não suporta essa concatenação é o $not
e sua estrutura consiste em utilizar o operador depois do campo e antes da verificação.
# Sintaxe para o operador $not
{ <campo>: { <operador lógico>: { <operador de comparação>: <valor> } } }
Já o restante dos Operadores Lógicos suporta a concatenação e sua estrutura é ligeiramente diferente, definimos o Operador a frente de tudo e dentro de um Array adicionamos nossas verificações
# Sintaxe para os o restante dos operadores
{ <operador lógico>: [{ <campo>: { <comparador>: <valor> } }, { <campo>: { <comparador>: <valor> } }] }
Quais são?
$not
- Tradução: Not, em português Não é.
O operador irá buscar todos os valores que Não são ... / Não possuem ...
{ price: { $not: { $gt: 19.99 } } } # busca todos os Documentos com a propriedade "price" NÃO maior que 19.99
# também busca todos os Documentos que NÃO possuem a propriedade "price"
$or
- Tradução: Or, em português Ou.
O operador irá buscar todos os valores que Ou é isso, Ou é aquilo ...
{ $or: [{ promo: true }, { price: { $lt: 19.99 } }] }
# busca todos os documentos que a propriedade "promo" seja verdadeira,
# OU que tenham a propriedade "price" menor que 19.99
$nor
- Tradução: Or not, em português Ou não.
O operador irá buscar todos os valores que Ou Não é isso, Ou Não é aquilo ...
{ $nor: [{ promo: true }, { price: { $lt: 19.99 } }] }
# busca todos os documentos que a propriedade "promo" NÃO seja verdadeira,
# OU que propriedade "price" NÃO seja menor que 19.99
$and
- Tradução: AND, em português E.
O operador irá buscar todos os valores que são isso E aquilo ...
{ $and: [{ promo: true }, { price: { $lt: 19.99 } }] }
# busca todos os documentos que a propriedade "promo" seja verdadeira,
# E que tenham a propriedade "price" menor que 19.99
sort()
O que é?
É um método utilizado para ordenar os resultados de uma busca, essa ordenação pode ser numérica, alfabética, crescente ou decrescente.
Sintaxe
O método sort()
deve ser utilizado após uma busca, ou seja, deve ser invocado logo após o método find()
.
O sort()
aceita "infinitos" parâmetros, esses que devem vir no formato chave:valor, onde a chave indica o campo a ser utilizado na ordenação e o valor diz se a ordenação deverá ser crescente ou decrescente.
db.my-collection.find().sort({ <campo>: <tipo de ordenação> })
db.my-collection.find().sort({ price: 1 }) # 1 indica ordenação crescente
db.my-collection.find().sort({ price: -1 }) # -1 indica ordenação decrescente
db.my-collection.find().sort({ price: 1 }, { title: 1 }) # podemos ordenar por mais de um campo
Removendo Documentos
O que é?
É a forma como podemos deletar um, ou mais, Documentos de nossa Coleção.
Sintaxe
Temos duas formas de deletarmos Documentos de nossas Coleções, podemos excluir apenas um, ou vários de uma vez. Para ambos os casos a sintaxe é basicamente a mesma, o que irá mudar será apenas o método.
Para removermos um documento iremos invocar o método de deleção desejado, passando para ele um objeto como parâmetro, esse objeto poderá conter apenas uma condição simples, bem como condições mais complexas.
Obs: Também podemos realizar deleções sem definir um filtro específico, porém isso não é recomendado. (equivalente ao DELETE sem WHERE).
# para deletar apenas um documento utilizamos o deleteOne()
db.my-collection.deleteOne({}) # exclui apenas o primeiro Documento da Coleção
db.my-collection.deleteOne({ _id: 4 })
# para deletar diversos documentos de uma única vez, utilizamos o deleteMany()
db.my-collection.deleteMany({}) # irá deletar TODOS os Documentos da Coleção
db.my-collection.deleteMany({ qty: 0 })
Links Úteis
Posted on June 29, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.