Skip to content

Instantly share code, notes, and snippets.

@oleoprado
Last active March 15, 2023 13:39
Show Gist options
  • Select an option

  • Save oleoprado/3e897a9489ce5eb87730a274e95d5a5d to your computer and use it in GitHub Desktop.

Select an option

Save oleoprado/3e897a9489ce5eb87730a274e95d5a5d to your computer and use it in GitHub Desktop.
Operadores mongoDB

Operadores de Comparação

Operator $lt

Seleciona os documentos em que o valor do atributo filtrado é menor do que (<) o valor especificado:

db.inventory.find({ qty: { $lt: 20 } })

Essa consulta selecionará todos os documentos na coleção inventory cujo valor do atributo qty é menor do que 20.


Operator $lte

Seleciona os documentos em que o valor do atributo filtrado é menor ou igual que (<=) o valor especificado:

db.inventory.find({ qty: { $lte: 20 } })

Essa query selecionará todos os documentos na coleção inventory cujo valor do atributo qty é menor ou igual a 20.


Operator $gt

Seleciona os documentos em que o valor do atributo filtrado é maior do que (>) o valor especificado:

db.inventory.find({ qty: { $gt: 20 } })

Essa query selecionará todos os documentos na coleção inventory cujo valor do atributo qty é maior do que 20.


Operator $gte

Seleciona os documentos em que o valor do atributo filtrado é maior ou igual que (>=) o valor especificado:

db.inventory.find({ qty: { $gte: 20 } })

Essa query selecionará todos os documentos na coleção inventory cujo valor do atributo qty é maior ou igual a 20.


Operator $eq

Seleciona os documentos em que o valor do atributo filtrado é igual (=) ao valor especificado.Esse operador é equivalente ao filtro { campo: <valor> } e não tem nenhuma diferença de performance.

db.inventory.find({ qty: { $eq: 20 } })

ou

db.inventory.find({ qty: 20 })

Essa query selecionará todos os documentos na coleção inventory cujo valor do atributo qty é igual a 20.


Operator $ne

Seleciona os documentos em que o valor do atributo filtrado NÃO é igual ao valor especificado:

db.inventory.find({ qty: { $ne: 20 } })

Essa query selecionará todos os documentos na coleção inventory cujo valor do atributo qty é diferente de 20, incluindo os documentos em que o atributo qty não existe


Operator $in

Seleciona os documentos em que o valor do atributo é igual a um dos valores do array:

db.inventory.find({ qty: { $in: [ 5, 15 ] } })

Essa query selecionará todos os documentos na coleção inventory cujo valor do atributo qty é 5 ou 15


Operator $nin

Seleciona os documentos em que o valor do atributo NÃO é igual ao especificado no array, ou o campo não existe:

db.inventory.find({ qty: { $nin: [ 5, 15 ] } })

Essa query selecionará todos os documentos na coleção inventory cujo valor do atributo qty é diferente de 5 e 15.Esse resultado também inlcui os documentos em que o atributo qty não existe.


Operador $exists

Sintaxe:

{ campo: { $exists: <boolean> } }

Quando o <boolean> é verdadeiro (true), o operador $exists encontra os documentos que contêm o atributo, incluindo os documentos em que o valor do atributo é igual a null. Se o <boolean> é falso (false), a consulta retorna somente os documentos que não contêm o atributo.

db.inventory.find({ qty: { $exists: true } })

Essa consulta selecionará todos os documentos na coleção inventory em que o atributo qty existe.

Você também pode combinar operadores, como no exempo abaixo:

db.inventory.find({ qty: { $exists: true, $nin: [ 5, 15 ] } })

Essa consulta selecionará todos os documentos na coleção inventory em que o atributo qty existe E seu valor é diferente de 5 e 15

Operadores Lógicos

Operator $not

O operador $not executa uma operação de NEGAÇÃO no <operador ou expressão> especificado e seleciona os documentos que não correspondam ao <operador ou expressão>. Também inclui os documentos que não contêm o atributo:
db.inventory.find({ price: { $not: { $gt: 1.99 } } })

Essa consulta selecionará todos os documentos na coleção inventory cujo valor do atributo price é menor ou igual a 1.99(não é maior que 1.99) ou em que o atributo price não existe.

IMPORTANTE:

a expressão { $not: { $gt: 1.99 } } retorna um resultado diferente do operador $lte. Ao utilizar { $lte: 1.99 }, os documentos retornados serão somente aqueles em que o campo price existe e cujo valor é menor ou igual a 1.99.


Operator $or

O operador $or executa a operação lógica de OU em um array de uma ou mais expressões e seleciona os documentos que satisfaçam ao menos uma das expressões:


Sintaxe:

{ $or: [{ <expression1> }, { <expression2> }, ... , { <expressionN> }] }

db.inventory.find({ $or: [{ qty: { $lt: 20 } }, { price: 10 }] })

Essa consulta selecionará todos os documentos na coleção inventory cujo valor do atributo qty é menor do que 20 ou o valor do atributo price é igual a 10 .



Operator $nor

O operador $or também executa uma operação lógica NEGAÇÃO porém, em um array de uma ou mais expressões, e seleciona os documentos em que todas essas expressões falhem, ou seja, seleciona os documentos em que todas as expressões desse array sejam falsas:


Sintaxe:

{ $nor: [ { <expressão1> }, { <expressão2> }, ...  { <expressãoN> } ] }

db.inventory.find({ $nor: [{ price: 1.99 }, { sale: true }] })

Essa query retorna todos os documentos da coleção inventory que:

  • Contêm o atributo price com o valor diferente de 1.99 e o atributo sale com o valor diferente de true;
  • Ou contêm o atributo price com valor diferente de 1.99 e não contêm o atributo sale;
  • Ou não contêm o atributo price e contêm o atributo sale com valor diferente de true;
  • Ou não contêm o atributo price e nem o atributo sale.


Operator $and

O operador $and executa a operação lógica E num array de uma ou mais expressões e seleciona os documentos que satisfaçam todas as expressões no array. O operador $and usa o que chamamos de avaliação em curto-circuito (short-circuit evaluation). Se alguma expressão for avaliada como falsa, o MongoDB não avaliará as expressões restantes, pois o resultado final sempre será falso independentemente do resultado delas.


Sintaxe:

{ $and: [{ <expressão1> }, { <expressão2> } , ... , { <expressãoN> }] }

Múltiplas expressões especificando o mesmo atributo

db.inventory.find({
    $and: [
        { price: { $ne: 1.99 } },
        { price: { $exists: true } }
    ]
})

Essa consulta selecionará todos os documentos na coleção inventory em que o valor do atributo price é diferente de 1.99 e o atributo price existe.



Múltiplas expressões especificando o mesmo operador

db.inventory.find({
    $and: [
        { price: { $gt: 0.99, $lt: 1.99 } },
        {
            $or: [
                { sale : true },
                { qty : { $lt : 20 } }
            ]
        }
    ]
})

Essa consulta seleciona todos os documentos da coleção inventory em que o valor do campo price é maior que 0.99 e menor que 1.99, E o valor do atributo sale é igual a true, OU o valor do atributo qty é menor do que 20. Ou seja, essa expressão é equivalente a (price > 0.99 E price < 1.99) (onde o E está implícito na vírgula aqui { $gt: 0.99, $lt: 1.99 }) E (sale = true OU qty < 20).



Método sort()

Sintaxe:

db.colecao.find().sort({ "campo": "1 ou -1"})

Quando existe a necessidade de ordenar os documentos por algum atributo, o método sort() se mostra muito útil. Usando um valor positivo (1) como valor do atributo, os documentos da consultas são ordenados de forma crescente ou alfabética (também ordena por campos com strings). Em complemento, usando um valor negativo (-1), os documentos de saída estarão em ordem decrescente ou contra alfabética.

Esse método pode ser combinado com o método find():

db.example.find({}, { "value": 1, "name": 1 }).sort({ "value": -1, "name": 1 })

O sort() só pode ser usado se tiver algum resultado de busca antes:

db.colecao.find().sort({ nomeDoAtributo: 1 }) // certo
db.colecao.sort({ nomeDoAtributo: 1 }) // errado

Removendo documentos


deleteOne() e o deleteMany(). Os dois métodos aceitam um documento como parâmetro, que pode conter um filtro simples ou até mesmo um conjunto de expressões para atender aos critérios de seleção.

deleteOne()

Remove apenas um documento, que deve satisfazer o critério de seleção, mesmo que muitos outros documentos também se enquadrem no criterio. Se nenhum valor for passado como parâmetro, a operação removerá o primeiro documento da coleção. O exemplo abaixo remove o primeiro documento da coleção inventory em que o atributo status é igual a D:

db.inventory.deleteOne({ status: "D" })

deleteMany()

Esse método remove todos os documentos que satisfaçam o critério de seleção. O exemplo abaixo remove todos os documentos da coleção inventory em que o atributo status é igual a A:

db.inventory.deleteMany({ status : "A" })

Para remover todos os documentos da coleção, basta não passar nenhum parâmetro para o método deleteMany():

db.inventory.deleteMany({})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment