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