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