Capítulo 3: MongoDB - Consulta condicional

En este capítulo se introduce la consulta condicional de MongoDB, la cual es similar a los operadores de comparación tales como igual, mayor que y menor que en las declaraciones SQL.

Operadores condicionales admitidos por MongoDB

Operador Descripción
$eq Igual, similar al operador = en SQL
$gt Mayor que, similar al operador > en SQL
$gte Mayor que o igual a, similar al operador >= en SQL
$in Coincide con un array, cualquier valor, similar a la consulta in en SQL
$lt Menor que, similar al operador < en SQL
$nin No coincide con ningún valor en el array, similar al operador not in en SQL

Datos de prueba

Los datos de colección de inventario son los siguientes

{ _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 (Coincidencia igual)

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

// Abreviado, se puede omitir el operador $eq, qty = 20
db.inventory.find( { qty: 20 } )

Equivalente en SQL:

select * from inventory where qty = 20
// Esto es solo un ejemplo, SQL no admite el formato de campos anidados como item.name
select * from inventory where item.name = 20

$gt (Mayor que)

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

Equivalente en SQL:

select * from inventory where qty > 20

$gte (Mayor que o igual a)

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

Equivalente en SQL:

select * from inventory where qty >= 20

$in (En)

Coincide con un valor en el array

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

Equivalente en SQL:

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

$nin (No en)

Contrario al operador $in

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

Equivalente en SQL:

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

$lt (Menor que)

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

Equivalente en SQL:

select * from inventory where qty < 20