Consultas agregadas

Aquí tienes algunos ejemplos de consultas de agregación en MongoDB utilizando la colección de libros que has proporcionado:

1. Buscar libros por género y ordenar por fecha de publicación

db.libros.aggregate([
    { $match: { genero: "Novela" } },
    { $sort: { fecha_publicacion: 1 } }
])

2. Contar el número de libros por cada género

db.libros.aggregate([
    { $group: { _id: "$genero", total: { $sum: 1 } } },
    { $sort: { total: -1 } }
])

3. Encontrar el libro más antiguo y el más reciente

db.libros.aggregate([
    { $group: {
        _id: null,
        mas_antiguo: { $min: "$fecha_publicacion" },
        mas_reciente: { $max: "$fecha_publicacion" }
    } }
])

4. Calcular el número promedio de años desde la publicación de los libros hasta la fecha actual

db.libros.aggregate([
    { $project: {
        titulo: 1,
        años_desde_publicacion: { $subtract: [new Date(), "$fecha_publicacion"] }
    } },
    { $group: {
        _id: null,
        promedio_años: { $avg: { $divide: ["$años_desde_publicacion", 1000 * 60 * 60 * 24 * 365] } }
    } }
])

5. Encontrar libros publicados por una editorial específica y contar cuántos hay

db.libros.aggregate([
    { $match: { editorial: "Viking Press" } },
    { $count: "total_libros" }
])

6. Listar los libros publicados después de 1950 y ordenarlos por fecha de publicación en orden descendente

db.libros.aggregate([
    { $match: { fecha_publicacion: { $gt: new Date("1950-01-01") } } },
    { $sort: { fecha_publicacion: -1 } }
])

7. Agrupar los libros por autor y listar los títulos de los libros que han escrito

db.libros.aggregate([
    { $group: {
        _id: "$autor",
        libros: { $push: "$titulo" }
    } }
])

8. Calcular la cantidad de libros publicados por década

db.libros.aggregate([
    { $project: {
        decada: { $substr: [ { $year: "$fecha_publicacion" }, 0, 3 ] }
    } },
    { $group: {
        _id: { $concat: ["$_id", "0s"] },
        total: { $sum: 1 }
    } }
])

9. Filtrar libros que tienen la palabra “El” en el título

db.libros.aggregate([
    { $match: { titulo: { $regex: /El/, $options: "i" } } }
])

10. Contar libros por autor y ordenar los autores por el número de libros en orden descendente

db.libros.aggregate([
    { $group: {
        _id: "$autor",
        total_libros: { $sum: 1 }
    } },
    { $sort: { total_libros: -1 } }
])

Estos ejemplos muestran cómo utilizar las funcionalidades de agregación de MongoDB para realizar consultas complejas y obtener información específica de la colección de libros.

Proyecciones

Por supuesto, las proyecciones en MongoDB se utilizan para incluir o excluir campos específicos en los documentos devueltos por una consulta. Aquí tienes varios ejemplos de consultas con proyecciones utilizando la colección libros:

1. Incluir solo el campo titulo

db.libros.find({}, { titulo: 1, _id: 0 }).pretty()

2. Incluir solo los campos titulo y autor

db.libros.find({}, { titulo: 1, autor: 1, _id: 0 }).pretty()

3. Excluir el campo editorial

db.libros.find({}, { editorial: 0 }).pretty()

4. Incluir solo los campos tituloautor y fecha_publicacion

db.libros.find({}, { titulo: 1, autor: 1, fecha_publicacion: 1, _id: 0 }).pretty()

5. Incluir solo el campo genero

db.libros.find({}, { genero: 1, _id: 0 }).pretty()

6. Incluir solo el campo titulo y obtener los libros ordenados por fecha_publicacion (ascendente)

db.libros.find({}, { titulo: 1, _id: 0 }).sort({ fecha_publicacion: 1 }).pretty()

7. Excluir el campo _id

db.libros.find({}, { _id: 0 }).pretty()

8. Incluir solo los campos titulo y fecha_publicacion para libros de un autor específico

db.libros.find({ autor: "George Orwell" }, { titulo: 1, fecha_publicacion: 1, _id: 0 }).pretty()

9. Incluir solo los campos titulo y genero para libros publicados después de 1950

db.libros.find({ fecha_publicacion: { $gt: new Date("1950-01-01") } }, { titulo: 1, genero: 1, _id: 0 }).pretty()

10. Incluir solo el campo autor y contar cuántos libros tiene cada autor (proyección con agregación)

db.libros.aggregate([
    { $group: { _id: "$autor", total: { $sum: 1 } } },
    { $project: { autor: "$_id", total: 1, _id: 0 } }
])

11. Incluir solo los campos titulo y editorial para libros de un género específico

db.libros.find({ genero: "Realismo Mágico" }, { titulo: 1, editorial: 1, _id: 0 }).pretty()

12. Incluir solo los campos titulo y fecha_publicacion y excluir libros publicados antes de 1950

db.libros.find({ fecha_publicacion: { $gte: new Date("1950-01-01") } }, { titulo: 1, fecha_publicacion: 1, _id: 0 }).pretty()

13. Incluir solo el campo titulo y mostrar los libros en orden descendente de fecha_publicacion

db.libros.find({}, { titulo: 1, _id: 0 }).sort({ fecha_publicacion: -1 }).pretty()

14. Incluir solo los campos tituloautor y genero para libros de una editorial específica

db.libros.find({ editorial: "Viking Press" }, { titulo: 1, autor: 1, genero: 1, _id: 0 }).pretty()

15. Incluir solo el campo genero y contar cuántos libros hay en cada género (proyección con agregación)

db.libros.aggregate([
    { $group: { _id: "$genero", total: { $sum: 1 } } },
    { $project: { genero: "$_id", total: 1, _id: 0 } }
])

Estas proyecciones te permiten controlar qué campos se devuelven en los resultados de tus consultas, lo cual es útil para optimizar el rendimiento y la claridad de los datos que necesitas.

Ejemplos consultas MOngoDB

Claro, aquí tienes varios ejemplos de consultas que puedes realizar sobre la base de datos biblioteca y la colección libros:

1. Obtener todos los libros

db.libros.find().pretty()

2. Obtener un libro específico por su título

db.libros.findOne({ titulo: "1984" })

3. Obtener todos los libros de un autor específico

db.libros.find({ autor: "Gabriel García Márquez" }).pretty()

4. Obtener todos los libros publicados antes de un año específico

db.libros.find({ fecha_publicacion: { $lt: new Date("1950-01-01") } }).pretty()

5. Obtener todos los libros de un género específico

db.libros.find({ genero: "Fantasía" }).pretty()

6. Contar el número de libros en la colección

db.libros.countDocuments()

7. Obtener todos los libros ordenados por fecha de publicación (ascendente)

db.libros.find().sort({ fecha_publicacion: 1 }).pretty()

8. Obtener todos los libros ordenados por fecha de publicación (descendente)

db.libros.find().sort({ fecha_publicacion: -1 }).pretty()

9. Obtener todos los libros de un autor específico y ordenarlos por fecha de publicación

db.libros.find({ autor: "Gabriel García Márquez" }).sort({ fecha_publicacion: 1 }).pretty()

10. Obtener libros con un rango específico de fechas de publicación

db.libros.find({ 
    fecha_publicacion: { 
        $gte: new Date("1930-01-01"), 
        $lte: new Date("1950-12-31") 
    } 
}).pretty()

11. Actualizar el género de un libro específico

db.libros.updateOne(
    { titulo: "El Gran Gatsby" },
    { $set: { genero: "Novela Trágica" } }
)

12. Actualizar el autor de varios libros

db.libros.updateMany(
    { autor: "Gabriel García Márquez" },
    { $set: { autor: "G. García Márquez" } }
)

13. Eliminar un libro por su título

db.libros.deleteOne({ titulo: "La Metamorfosis" })

14. Eliminar todos los libros de un autor específico

db.libros.deleteMany({ autor: "G. García Márquez" })

15. Obtener libros con títulos que contengan una palabra específica (búsqueda por patrón)

db.libros.find({ titulo: /Cien/ }).pretty()

16. Obtener todos los libros publicados en un año específico

db.libros.find({ fecha_publicacion: { $gte: new Date("1967-01-01"), $lt: new Date("1968-01-01") } }).pretty()

17. Obtener todos los libros de una editorial específica

db.libros.find({ editorial: "Viking Press" }).pretty()

18. Agrupar libros por género y contar cuántos hay en cada grupo

db.libros.aggregate([
    { $group: { _id: "$genero", total: { $sum: 1 } } }
])

19. Encontrar libros cuyo título comienza con una letra específica

db.libros.find({ titulo: /^E/ }).pretty()

20. Obtener libros que no pertenezcan a un género específico

db.libros.find({ genero: { $ne: "Fantasía" } }).pretty()

Estas consultas te permiten explorar y manipular la colección libros de diversas maneras, proporcionando una base sólida para trabajar con tus datos en MongoDB.

Ejemplos básicos mongodb

Comandos para crear la base de datos y la colección

Crea la base de datos y la colección:

use biblioteca

db.createCollection("libros")

Comandos para insertar 10 documentos de prueba

A continuación, insertarás 10 documentos con los campos tituloautorfecha_publicaciongenero, y editorial.

db.libros.insertMany([
    { titulo: "Cien Años de Soledad", autor: "Gabriel García Márquez", fecha_publicacion: new Date("1967-05-30"), genero: "Realismo Mágico", editorial: "Sudamericana" },
    { titulo: "Don Quijote de la Mancha", autor: "Miguel de Cervantes", fecha_publicacion: new Date("1605-01-16"), genero: "Novela", editorial: "Francisco de Robles" },
    { titulo: "1984", autor: "George Orwell", fecha_publicacion: new Date("1949-06-08"), genero: "Distopía", editorial: "Secker & Warburg" },
    { titulo: "Matar a un ruiseñor", autor: "Harper Lee", fecha_publicacion: new Date("1960-07-11"), genero: "Drama", editorial: "J.B. Lippincott & Co." },
    { titulo: "El Gran Gatsby", autor: "F. Scott Fitzgerald", fecha_publicacion: new Date("1925-04-10"), genero: "Tragedia", editorial: "Charles Scribner's Sons" },
    { titulo: "Orgullo y Prejuicio", autor: "Jane Austen", fecha_publicacion: new Date("1813-01-28"), genero: "Romance", editorial: "T. Egerton" },
    { titulo: "En el camino", autor: "Jack Kerouac", fecha_publicacion: new Date("1957-09-05"), genero: "Novela", editorial: "Viking Press" },
    { titulo: "El Hobbit", autor: "J.R.R. Tolkien", fecha_publicacion: new Date("1937-09-21"), genero: "Fantasía", editorial: "George Allen & Unwin" },
    { titulo: "Fahrenheit 451", autor: "Ray Bradbury", fecha_publicacion: new Date("1953-10-19"), genero: "Ciencia ficción", editorial: "Ballantine Books" },
    { titulo: "La Metamorfosis", autor: "Franz Kafka", fecha_publicacion: new Date("1915-01-01"), genero: "Ficción", editorial: "Kurt Wolff Verlag" }
])

Comandos para verificar la inserción

Para asegurarte de que los documentos se han insertado correctamente, puedes usar el siguiente comando para mostrar todos los documentos en la colección:

db.libros.find().pretty()

Este comando mostrará todos los documentos de la colección libros en un formato legible.

Comandos para realizar operaciones básicas

Leer (Read)

Mostrar todos los documentos de la colección:

db.libros.find().pretty()

Mostrar un libro específico por su título:

db.libros.findOne({ titulo: "1984" })

Actualizar (Update)

Actualizar la editorial de un libro específico:

db.libros.updateOne(
    { titulo: "El Hobbit" },
    { $set: { editorial: "Houghton Mifflin" } }
)

Eliminar (Delete)

Eliminar un libro específico por su título:

db.libros.deleteOne({ titulo: "La Metamorfosis" })

Estos comandos te permitirán gestionar una colección de libros en MongoDB desde la consola, realizando operaciones CRUD básicas y verificando los resultados.

Ejercicio datos geográficos

Con la colección que se adjunta al final, realizar las siguientes operaciones:

Encontrar la ciudad que tiene una población (‘pop’) mayor de 40000
Encontrar las ciudades que tienen en ‘loc’ un valor entre 37 y 42. Puede ser cualquier valor pero ese valor tiene que cumplir las dos condiciones
Encontrar las ciudades de ‘LA’ con una población menor de 10000 habitantes
Encontrar las ciudades con una población menor de 1000 habitantes pero sólo mostrar la ciudad y el estado
Modificar la ciudad ‘CUSHMAN’ y ponerle una población de 37231 habitantes.
Modificar las ciudades de ‘LA’ con menos de 1000 habitantes y ponerles en el estado ‘##’
Eliminar las ciudades con menos de 500 habitantes.

db.ciudades.insertMany([{ "_id" : "01001", "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA" },
{ "_id" : "01002", "city" : "CUSHMAN", "loc" : [ -72.51564999999999, 42.377017 ], "pop" : 36963, "state" : "MA" },
{ "_id" : "01005", "city" : "BARRE", "loc" : [ -72.10835400000001, 42.409698 ], "pop" : 4546, "state" : "MA" },
{ "_id" : "01007", "city" : "BELCHERTOWN", "loc" : [ -72.41095300000001, 42.275103 ], "pop" : 10579, "state" : "MA" },
{ "_id" : "01008", "city" : "BLANDFORD", "loc" : [ -72.936114, 42.182949 ], "pop" : 1240, "state" : "MA" },
{ "_id" : "01010", "city" : "BRIMFIELD", "loc" : [ -72.188455, 42.116543 ], "pop" : 3706, "state" : "MA" },
{ "_id" : "01011", "city" : "CHESTER", "loc" : [ -72.988761, 42.279421 ], "pop" : 1688, "state" : "MA" },
{ "_id" : "01012", "city" : "CHESTERFIELD", "loc" : [ -72.833309, 42.38167 ], "pop" : 177, "state" : "MA" },
{ "_id" : "01013", "city" : "CHICOPEE", "loc" : [ -72.607962, 42.162046 ], "pop" : 23396, "state" : "MA" },
{ "_id" : "29372", "city" : "PACOLET", "loc" : [ -81.758703, 34.901708 ], "pop" : 4129, "state" : "SC" },
{ "_id" : "29374", "city" : "GLENN SPRINGS", "loc" : [ -81.85785300000001, 34.774808 ], "pop" : 4588, "state" : "SC" },
{ "_id" : "29376", "city" : "ROEBUCK", "loc" : [ -81.95255, 34.8688 ], "pop" : 5009, "state" : "SC" },
{ "_id" : "29379", "city" : "UNION", "loc" : [ -81.62023499999999, 34.726855 ], "pop" : 22553, "state" : "SC" },
{ "_id" : "29384", "city" : "WATERLOO", "loc" : [ -82.087968, 34.33673 ], "pop" : 2992, "state" : "SC" },
{ "_id" : "29385", "city" : "WELLFORD", "loc" : [ -82.09270600000001, 34.951394 ], "pop" : 6637, "state" : "SC" },
{ "_id" : "29388", "city" : "WOODRUFF", "loc" : [ -82.044658, 34.757864 ], "pop" : 10206, "state" : "SC" },
{ "_id" : "29401", "city" : "CHARLESTON", "loc" : [ -79.93706899999999, 32.779506 ], "pop" : 12475, "state" : "SC" },
{ "_id" : "29403", "city" : "CHARLESTON", "loc" : [ -79.94928299999999, 32.797575 ], "pop" : 24620, "state" : "SC" },
{ "_id" : "29404", "city" : "CHARLESTON", "loc" : [ -80.06768700000001, 32.895816 ], "pop" : 5420, "state" : "SC" },
{ "_id" : "29405", "city" : "CHARLESTON", "loc" : [ -79.97644200000001, 32.851206 ], "pop" : 30621, "state" : "SC" },
{ "_id" : "30136", "city" : "DULUTH", "loc" : [ -84.15793600000001, 33.98619 ], "pop" : 30932, "state" : "GA" },
{ "_id" : "30137", "city" : "EMERSON", "loc" : [ -84.75704500000001, 34.119969 ], "pop" : 1353, "state" : "GA" },
{ "_id" : "30139", "city" : "FAIRMOUNT", "loc" : [ -84.76687800000001, 34.465241 ], "pop" : 3405, "state" : "GA" },
{ "_id" : "30140", "city" : "FELTON", "loc" : [ -85.220781, 33.887066 ], "pop" : 489, "state" : "GA" },
{ "_id" : "30141", "city" : "HIRAM", "loc" : [ -84.769875, 33.867286 ], "pop" : 6613, "state" : "GA" },
{ "_id" : "30143", "city" : "JASPER", "loc" : [ -84.475881, 34.461965 ], "pop" : 8256, "state" : "GA" },
{ "_id" : "30144", "city" : "KENNESAW", "loc" : [ -84.60466, 34.028656 ], "pop" : 37120, "state" : "GA" },
{ "_id" : "30145", "city" : "KINGSTON", "loc" : [ -84.997299, 34.250053 ], "pop" : 2534, "state" : "GA" },
{ "_id" : "35089", "city" : "KELLYTON", "loc" : [ -86.04839699999999, 32.979068 ], "pop" : 1584, "state" : "AL" },
{ "_id" : "35091", "city" : "KIMBERLY", "loc" : [ -86.80841700000001, 33.768355 ], "pop" : 1045, "state" : "AL" },
{ "_id" : "35094", "city" : "LEEDS", "loc" : [ -86.57482400000001, 33.528333 ], "pop" : 10421, "state" : "AL" },
{ "_id" : "35096", "city" : "LINCOLN", "loc" : [ -86.111152, 33.605913 ], "pop" : 5033, "state" : "AL" },
{ "_id" : "35098", "city" : "LOGAN", "loc" : [ -87.038115, 34.184079 ], "pop" : 2379, "state" : "AL" },
{ "_id" : "35111", "city" : "MC CALLA", "loc" : [ -87.102379, 33.284546 ], "pop" : 8147, "state" : "AL" },
{ "_id" : "35114", "city" : "MAYLENE", "loc" : [ -86.87274499999999, 33.231694 ], "pop" : 3727, "state" : "AL" },
{ "_id" : "47124", "city" : "GREENVILLE", "loc" : [ -86.00829899999999, 38.353533 ], "pop" : 1162, "state" : "IN" },
{ "_id" : "47125", "city" : "HARDINSBURG", "loc" : [ -86.317983, 38.462599 ], "pop" : 2496, "state" : "IN" },
{ "_id" : "47126", "city" : "HENRYVILLE", "loc" : [ -85.773403, 38.539829 ], "pop" : 2648, "state" : "IN" },
{ "_id" : "47129", "city" : "CLARKSVILLE", "loc" : [ -85.524438, 38.537273 ], "pop" : 379, "state" : "IN" },
{ "_id" : "47130", "city" : "JEFFERSONVILLE", "loc" : [ -85.735885, 38.307767 ], "pop" : 56543, "state" : "IN" },
{ "_id" : "71060", "city" : "MOORINGSPORT", "loc" : [ -93.973018, 32.66258 ], "pop" : 2838, "state" : "LA" },
{ "_id" : "71061", "city" : "OIL CITY", "loc" : [ -93.983844, 32.745107 ], "pop" : 1874, "state" : "LA" },
{ "_id" : "71063", "city" : "PELICAN", "loc" : [ -93.563361, 31.896563 ], "pop" : 998, "state" : "LA" },
{ "_id" : "71064", "city" : "PLAIN DEALING", "loc" : [ -93.690534, 32.907419 ], "pop" : 4904, "state" : "LA" },
{ "_id" : "71065", "city" : "PLEASANT HILL", "loc" : [ -93.513594, 31.808577 ], "pop" : 1338, "state" : "LA" },
{ "_id" : "71862", "city" : "WASHINGTON", "loc" : [ -93.673529, 33.754596 ], "pop" : 821, "state" : "AR" },
{ "_id" : "71864", "city" : "WILLISVILLE", "loc" : [ -93.31211999999999, 33.484731 ], "pop" : 888, "state" : "AR" },
{ "_id" : "71865", "city" : "WILTON", "loc" : [ -94.135746, 33.734794 ], "pop" : 983, "state" : "AR" },
{ "_id" : "71866", "city" : "WINTHROP", "loc" : [ -94.395174, 33.858321 ], "pop" : 950, "state" : "AR" },
{ "_id" : "71901", "city" : "LAKE CATHERINE", "loc" : [ -93.02602400000001, 34.501475 ], "pop" : 27402, "state" : "AR" },
{ "_id" : "71909", "city" : "HOT SPRINGS VILL", "loc" : [ -93.00638600000001, 34.65862 ], "pop" : 8268, "state" : "AR" }])

Ejercicios sobre teléfonos

Buscar los que tengan un ‘rating’ mayor de 10
Buscar los que tengan la propiedad color
Buscar los que sean para (‘for’) ‘ac3’
Buscar los que en la propiedad ‘n’ de ‘data’ de ‘limits’ sea ‘unlimited’

Modificar el teléfono “”AC3 Case Black” y ponerle un ‘price’ de 15
Modificar los teléfonos que tengan ‘term_year’ a 1 y ponerle un monthly_price de 80
Eliminar los teléfonos que tengan un rating menor de dos

Mini ejercicio

Con los datos del mongodb:

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
   { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
   { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
   { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
   { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);

Buscar los documentos que tengan en dim_cm un valor entre 10 y 15

Ejercicio MongoDB

Vamos a crear una base de datos llamada tienda.

Y dentro de la tienda vamos a crear una colección teléfonos.

Insertaremos los siguientes datos:


[{"name" : "AC3 Phone", "brand" : "ACME", "type" : "phone", "price" : 200, "rating" : 3.8,"warranty_years" : 1, "available" : true },
{  "name" : "AC7 Phone", "brand" : "ACME", "type" : "phone", "price" : 320, "rating" : 4,"warranty_years" : 1, "available" : false },
{  "name" : "AC3 Series Charger", "type" : [ "accessory", "charger" ], "price" : 19, "rating" : 2.8,"warranty_years" : 0.25, "for" : [ "ac3", "ac7", "ac9" ] },
{  "name" : "AC3 Case Green", "type" : [ "accessory", "case" ], "color" : "green", "price" : 12, "rating" : 1,"warranty_years" : 0 },
{  "name" : "Phone Extended Warranty", "type" : "warranty", "price" : 38, "rating" : 5,"warranty_years" : 2, "for" : [ "ac3", "ac7", "ac9", "qp7", "qp8", "qp9" ] },
{  "name" : "AC3 Case Black", "type" : [ "accessory", "case" ], "color" : "black", "price" : 12.5, "rating" : 2,"warranty_years" : 0.25, "available" : false, "for" : "ac3" },
{  "name" : "AC3 Case Red", "type" : [ "accessory", "case" ], "color" : "red", "price" : 12, "rating" : 4,"warranty_years" : 0.25, "available" : true, "for" : "ac3" },
{ "name" : "Phone Service Basic Plan", "type" : "service", "monthly_price" : 40,"rating" : 3, "limits" : { "voice" : { "units" : "minutes", "n" : 400, "over_rate" : 0.05 }, "data" : { "units" : "gigabytes", "n" : 20, "over_rate" : 1 }, "sms" : { "units" : "texts sent", "n" : 100, "over_rate" : 0.001 } }, "term_years" : 2 },
{  "name" : "Phone Service Core Plan", "type" : "service", "monthly_price" : 60, "rating" : 3, "limits" : { "voice" : { "units" : "minutes", "n" : 1000, "over_rate" : 0.05 }, "data" : { "n" : "unlimited", "over_rate" : 0 }, "sms" : { "n" : "unlimited", "over_rate" : 0 } }, "term_years" : 1 },
{ "name" : "Phone Service Family Plan", "type" : "service", "monthly_price" : 90,"rating" : 4, "limits" : { "voice" : { "units" : "minutes", "n" : 1200, "over_rate" : 0.05 }, "data" : { "n" : "unlimited", "over_rate" : 0 }, "sms" : { "n" : "unlimited", "over_rate" : 0 } }, "sales_tax" : true, "term_years" : 2 }]

Después crearemos las siguientes búsquedas:

Elementos cuyo ‘type’ sea ‘service’.
Elementos cuyo ‘type’ sea ‘service’ y el precio mensual > 50
Elementos cuyo ‘type’ sea ‘service’ O el precio mensual > 50

MongoDB Consultas

https://docs.mongodb.com/manual/tutorial/query-documents/

https://docs.mongodb.com/manual/reference/operator/query/#query-selectors

Si yo en sql quiero aquellos registros cuya qty > 50

where qty>50

Si yo en MongoDB quiero lo mismo tengo que ponerlo así:

qty:{$gt:50}

campo:{operador:valor}


-- Buscar todos

db.inventory.find();

-- Buscar por igualdad. El campo debe valor lo mismo que lo que le pongo

db.inventory.find( { status: "D" } )

-- Buscar usando un operador. Ojo porque la sintaxis es un poco extraña

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

-- Operador in

db.inventory.find({status:{$in:["A","D"]}});

-- Por defecto, si tenemos varias condiciones, se entiende que se tienen que cumplir todas (AND)

db.inventory.find( { status: "A", qty: { $lt: 30 } } )

db.inventory.find({
$or: [
	{status:"D"},
	{qty:{
		$lt:50
		}
	}
]
})

db.inventory.find({$or: [{status:"D"},{qty:{$lt:50}}]})

-- esto

db.inventory.find( {
     status: "A",
     $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )

-- sería equivalente a: SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")

db.inventory.find({qty:{$gte:40,$lte:60}})

-- En búsquedas anidadas por defecto se entiende la igualdad abosulta en valores y orden:

db.inventory.find( { size: { w: 21,h: 14,  uom: "cm" } } ) -- esto no lo encuentra

db.inventory.find({size:{h:14}}) -- Esto tampoco

db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } ) -- Esto sí

-- Para buscar por un valor concreto independientemente de optras propiedades usamos el . (punto)

db.inventory.find({"size.h":8.5})

-- Podemos usar varias condiciones tanto de propiedades anidadas como de propiedades normales

db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )

-- Al buscar en array la igualdad es como en los anidades: mismos valores en mismo orden
-- Las dos consultas siguientes nos devuelven diferentes resultados

db.inventory.find( { tags: [ "blank","red"] } )

db.inventory.find( { tags: ["red", "blank"] } )

-- Si yo omito los corchetes y uso un valor (o un operador) se busan los elementos que contengan el valor o que cumplan la condición:

db.inventory.find({tags:"red"}) -- Busca los que tengan 'red' en el array

db.inventory.find({tags:{$in:["red","blue"]}}) -- Que tengan "red" o "blue" en alguna parte del array

db.inventory.find( { dim_cm: { $gt: 25 } } ) -- Algún elemento del array sea mayor de 25

-- Las dos condiciones se tienen que cumplir pero lo pueden cumplir elementos diferentes del array
-- Es decir, una condición la puede cumplir un elemento y la otra otro.

db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )

-- Las dos condiciones las tiene que cumplir juntas al menos un elemento del array

db.inventory.find( { dim_cm: { $elemMatch: { $gt: 15, $lt: 20 } } } )

-- Busco en un array en una posición concreta (índice de base 0)

db.inventory.find( { "dim_cm.1": { $gt: 25 } } )

-- Buscar los documentos cuyo array tiene una longitud determinada

db.inventory.find( { "tags": { $size: 3 } } )

-- Buscar los documentos en cuyo array haya un elemento que cumpla esa condición:

db.inventory.find( { "instock.warehouse": "C" } )

db.inventory.find( { "instock.qty": {$gte:40}} )

-- Que me muestre sólo los campos 'item' y 'status'. El id se ve siempre por defecto

db.inventory.find( { status: "A" }, { item: 1, status: 1 } )

-- Que me muestre sólo los campos 'item' y 'status'. El id lo oculto

db.inventory.find( { status: "A" }, { item: 1, status: 1, _id:0 } )

-- Que se muestren todos los campos menos 'size' e 'instock'

db.inventory.find( { status: "A" }, { size:0,instock:0 } )

-- Podemos usar $slice para obtener en la proyección subconjuntos de un array, y permite valores negativos

db.inventory.find( { status: "A" }, { item: 1, status: 1, instock: { $slice: -1 } } )

-- Busca los documentos que no tengan la propiedad o que valga nulo

db.inventory.find( { item: null } )

-- Busca los documentos que no tengan la propiedad, si la tienen y vale nulo no los encuentra

db.inventory.find( { item : { $exists: false } } )

-- Busca los documentos que SI tengan la propiedad aunque valga nulo

db.inventory.find( { item : { $exists: true } } )


MongoDB insert

https://docs.mongodb.com/manual/tutorial/insert-documents/

db.collection.insertOne() Inserts a single document into a collection.
db.collection.insertMany() db.collection.insertMany() inserts multiple documents into a collection.
db.collection.insert() db.collection.insert() inserts a single document or multiple documents into a collection.

SIEMPRE empezamos con db, NO nuestra base de datos.

Si nuestra colección no existe se crea. Así que ojo con poner el nombre bien.

Ejemplo:

db.actor.insertOne({nombre:"Ana",apellidos:"Pi"});

db.actor.insertMany([{
nombre:"Eva",
apellido:"Pou",
intereses:["drama","comedia"]
},
{
nombre:"Ana",
apellido:"Ros",
pelicula:{
	titulo:"Drama en la cumbre",
	anyo:2020
	}
},
{
nombre:"Ana",
apellido:"Ros",
pelicula:{
	titulo:"Drama en la cumbro",
	anyo:2020
	}
}
])

db.inventory.insertOne(
   { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])