Capítulo 3: MongoDB - Consulta Condicional

Este capítulo introduz a consulta condicional do MongoDB, que é semelhante aos operadores de comparação, como igual, maior que e menor que, nas instruções SQL.

Operadores Condicional Suportados pelo MongoDB

Operador Descrição
$eq Igual, similar ao operador = em SQL
$gt Maior que, similar ao operador > em SQL
$gte Maior do que ou igual a, similar ao operador >= em SQL
$in Corresponde a um array, a qualquer valor, similar à consulta in em SQL
$lt Menor que, similar ao operador < em SQL
$nin Não corresponde a nenhum valor no array, similar ao operador not in em SQL

Dados de Teste

Os dados da coleção de inventário são os seguintes

{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }

$eq (Corresponder Igualmente)

db.inventory.find( { qty: { $eq: 20 } } )
db.inventory.find( { "item.name": { $eq: "ab" } } )

// Abreviado, pode ignorar o operador $eq, qty = 20
db.inventory.find( { qty: 20 } )

Equivalente em SQL:

select * from inventory where qty = 20
// Este é apenas um exemplo, o SQL não suporta o formato de campos aninhados como item.name
select * from inventory where item.name = 20

$gt (Maior Que)

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

Equivalente em SQL:

select * from inventory where qty > 20

$gte (Maior Que ou Igual A)

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

Equivalente em SQL:

select * from inventory where qty >= 20

$in

Corresponde a um valor no array

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

Equivalente em SQL:

select * from inventory where qty in (5, 15)

$nin

Oposto ao operador $in

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

Equivalente em SQL:

select * from inventory where qty not in (5, 15)

$lt (Menor Que)

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

Equivalente em SQL:

select * from inventory where qty < 20