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" }
Gracias, pero podría estar mejor explicado ya que no se entiende bien lo que quieres decir, por ejemplo, a la hora de buscar un elemento por tipo de dato.
Espero que tu duda este resuelta ya.
La busqueda por tipo de dato es con el operador punto y en tipo json. Ejemplo:
db.personas.find(‘data.sexo’:’hombre’).pretty()
Está muy bien porque cuando queremos una guía rápida, ésto es lo que buscamos. Gracias!
Hola muy buena guia,
Pero en el caso de querere solo mostrar ¿el nombre de los amigos y no la edad como sería la línea de código?
Gracias
Alguien me puede ayudar en darme la forma de filtrar y luego muestre documentos distintos, que no se repitan. Gracias