Comando de búsqueda
db.amigos.find({[CONSULTA_1]},{[PROYECIÓN_2]})
Este comando puede recibir dos parámetros: una consulta y una proyección. Estos comandos son opcionales.
1. Consulta de datos
Personas mayores de 25 años
db.amigos.find({"Edad": {$gt: 25}})
2. Mostrar proyección
Mostrar nombre y apellidos de las Marisas encontradas
db.amigos.find({Nombre: "Marisa" },{Nombre:1, Apellidos:2})
Mostar todos los datos de una colección
Formato básico
db.amigos.find()
EJEMPLO DE BASE DE DATOS UTILIZADA PARA LAS BÚSQUEDAS:
{ "_id" : ObjectId("5a6f05fbb56b58b447e66809"), "Nombre" : "Luís", "Apellidos" : "Martinez", "Edad" : 18, "Aficiones" : [ "fútbol", "senderismo", "tenis" ], "Amigos" : [ { "Nombre" : "Monica", "Edad" : 20 }, { "Nombre" : "Andrés", "Edad" : 24 } ] }
{ "_id" : ObjectId("5a6f06fab56b58b447e6680a"), "Nombre" : "Marisa", "Apellidos" : "García", "Edad" : 18, "Aficiones" : [ "senderismo", "tenis", "pintura" ], "Amigos" : [ { "Nombre" : "Monica", "Edad" : 20 } ] }
{ "_id" : ObjectId("5a6f08e5b56b58b447e6680b"), "Nombre" : "Joaquin", "Apellidos" : "Rodriguez", "Edad" : 18, "Aficiones" : [ "fútbol", "natación" ], "Amigos" : [ { "Nombre" : "Andrés", "Edad" : 24 } ] }
{ "_id" : ObjectId("5a6f08e5b56b58b447e6680c"), "Nombre" : "Luís", "Apellidos" : "Martinez", "Edad" : 28, "Aficiones" : [ "natación", "culturismo" ], "Amigos" : [ { "Nombre" : "Juan", "Edad" : 40 }, { "Nombre" : "Antonio", "Edad" : 52 } ] }
Formato más legible
db.amigos.find().pretty()
{
"_id" : ObjectId("5a6f05fbb56b58b447e66809"),
"Nombre" : "Luís",
"Apellidos" : "Martinez",
"Edad" : 18,
"Aficiones" : [
"fútbol",
"senderismo",
"tenis"
],
"Amigos" : [
{
"Nombre" : "Monica",
"Edad" : 20
},
{
"Nombre" : "Andrés",
"Edad" : 24
}
]
}
...
Operaciones de comparación
Mayor que
Mostrar nombre y apellidos de los mayores de 25 años
db.amigos.find({"Edad": {$gt: 25}},{Nombre:1, Apellidos:2})
{ "_id" : ObjectId("5a6f08e5b56b58b447e6680c"), "Nombre" : "Luís", "Apellidos" : "Martinez" }
Menor que
Mostrar nombre y apellidos de los menores de 25 años
db.amigos.find({"Edad": {$lt: 25}},{Nombre:1, Apellidos:2})
{ "_id" : ObjectId("5a6f05fbb56b58b447e66809"), "Nombre" : "Luís", "Apellidos" : "Martinez" }
{ "_id" : ObjectId("5a6f06fab56b58b447e6680a"), "Nombre" : "Marisa", "Apellidos" : "García" }
{ "_id" : ObjectId("5a6f08e5b56b58b447e6680b"), "Nombre" : "Joaquin", "Apellidos" : "Rodriguez" }
Operadores de existencia y tipo
Como MongoDB es una base de datos sin esquema, cada documento puede tener distintos campos e incluso estos campos pueden ser de distintos tipos.
Existencia
Por esto es muy habitual usar en las consultas una operación que nos indique la existencia de un campo.
db.amigos.insert({ Nombre: "Natalia", Edad: 18, Aficiones: ["pintura"] })
db.amigos.find({Apellidos:{$exists:false}},{Nombre:1})
{ "_id" : ObjectId("5a6f49aab56b58b447e6680f"), "Nombre" : "Natalia" }
Tipo
Si queremos hacer una consulta por tipo de dato usaríamos:
db.amigos.find({Apellidos:{$type:2}},{Nombre:1})
{ "_id" : ObjectId("5a6f05fbb56b58b447e66809"), "Nombre" : "Luís" }
{ "_id" : ObjectId("5a6f06fab56b58b447e6680a"), "Nombre" : "Marisa" }
{ "_id" : ObjectId("5a6f08e5b56b58b447e6680b"), "Nombre" : "Joaquin" }
{ "_id" : ObjectId("5a6f08e5b56b58b447e6680c"), "Nombre" : "Luís" }
Operaciones lógicas:
Disyunción Y ($and)
db.amigos.find(
{
$and:
[
{Edad: {$gt:17}},
{Nombre: "Marisa" }
]
}
)
{ "_id" : ObjectId("5a6f06fab56b58b447e6680a"), "Nombre" : "Marisa", "Apellidos" : "García", "Edad" : 18, "Aficiones" : [ "senderismo", "tenis", "pintura" ], "Amigos" : [ { "Nombre" : "Monica", "Edad" : 20 } ] }
Conjunción O ($or)
db.amigos.find(
{
$or:
[
{Edad: {$gt: 20}},
{Nombre: "Marisa" }
]
}
)
{ "_id" : ObjectId("5a6f06fab56b58b447e6680a"), "Nombre" : "Marisa", "Apellidos" : "García", "Edad" : 18, "Aficiones" : [ "senderismo", "tenis", "pintura" ], "Amigos" : [ { "Nombre" : "Monica", "Edad" : 20 } ] }
{ "_id" : ObjectId("5a6f08e5b56b58b447e6680c"), "Nombre" : "Luís", "Apellidos" : "Martinez", "Edad" : 28, "Aficiones" : [ "natación", "culturismo" ], "Amigos" : [ { "Nombre" : "Juan", "Edad" : 40 }, { "Nombre" : "Antonio", "Edad" : 52 } ] }
Negación NO ($not)
db.amigos.find( {Edad:{$not: {$gt:23}}})
Negación NO ($nor)
Acepta dos o mas valores
db.amigos.find({$nor:[{Edad:{$gt:23}}, {Nombre: "Marisa"}]})
Operaciones sobre sub-documentos
db.inventario.insert([
{ "_id" : 1, "Nombre" : "peras", descripcion: "producto 1", "stock" : 220 },
{ "_id" : 2, "Nombre" : "manzanas", descripcion: "producto 2", "stock" : 91 },
{ "_id" : 3, "Nombre" : "naranjas", descripcion: "producto 3", "stock" : 72 },
{ "_id" : 4, "Nombre" : "platinos", descripcion: "producto 4", "stock" : 32 },
{ "_id" : 5, "Nombre": null, descripcion: "Incompleta" },
{ "_id" : 6 }
])
db.compras.insert([
{ "_id" : 1, "Item" : "peras", "precio" : 12, "cantidad" : 2 },
{ "_id" : 2, "Item" : "manzanas", "precio" : 20, "cantidad" : 1 },
{ "_id" : 3 }
])
db.compras.aggregate([
{ $lookup:
{
from: "inventario",
localField: "Item",
foreignField: "Nombre",
as: "inventario_docs"
}
}
])
Expresiones regulares: $regex
db.amigos.find({"Nombre": {$regex:".*a$"}},{Nombre:1})
{ "_id" : ObjectId("5a6f06fab56b58b447e6680a"), "Nombre" : "Marisa" }
{ "_id" : ObjectId("5a6f49aab56b58b447e6680f"), "Nombre" : "Natalia" }
Operaciones sobre arrays
Contar
b.amigos.find().count()
4
Ordenar descendente
db.amigos.find({},{Nombre:1}).sort({Nombre:1})
{ "_id" : ObjectId("5a6f090db56b58b447e6680d"), "Nombre" : "Joaquin" }
{ "_id" : ObjectId("5a6f05fbb56b58b447e66809"), "Nombre" : "Luís" }
{ "_id" : ObjectId("5a6f06fab56b58b447e6680a"), "Nombre" : "Marisa" }
{ "_id" : ObjectId("5a6f49aab56b58b447e6680f"), "Nombre" : "Natalia" }
Ordenar ascendente
db.amigos.find({},{Nombre:1}).sort({Nombre:-1})
{ "_id" : ObjectId("5a6f49aab56b58b447e6680f"), "Nombre" : "Natalia" }
{ "_id" : ObjectId("5a6f06fab56b58b447e6680a"), "Nombre" : "Marisa" }
{ "_id" : ObjectId("5a6f05fbb56b58b447e66809"), "Nombre" : "Luís" }
{ "_id" : ObjectId("5a6f090db56b58b447e6680d"), "Nombre" : "Joaquin" }
Limitar la búsqueda
db.amigos.find({},{Nombre:1}).sort({Nombre:1}).limit(2)
{ "_id" : ObjectId("5a6f090db56b58b447e6680d"), "Nombre" : "Joaquin" }
{ "_id" : ObjectId("5a6f05fbb56b58b447e66809"), "Nombre" : "Luís" }
Buscar a partir del X
db.amigos.find({},{Nombre:1}).sort({Nombre:1}).skip(2)
{ "_id" : ObjectId("5a6f06fab56b58b447e6680a"), "Nombre" : "Marisa" }
{ "_id" : ObjectId("5a6f49aab56b58b447e6680f"), "Nombre" : "Natalia" }
Crear un array con los elementos de salida
db.compras.find({},{Nombre:1}).toArray()
{ "_id" : ObjectId("5a6f06fab56b58b447e6680a"), "Nombre" : "Marisa" }
{ "_id" : ObjectId("5a6f49aab56b58b447e6680f"), "Nombre" : "Natalia" }
Copiar colecciones en MongoDB
db.amigos.aggregate([{$out: "copia_amigos"}])
show collections
amigos
compras
copia_amigos
inventario
system.indexes