Búsquedas en MongoDB

Transcripción

Búsquedas en MongoDB
Búsquedas en MongoDB
Preparación del entorno: Vamos a restaurar la base de datos de pruebas sobre la que haremos las consultas. Para ello haremos uso de la herramienta mongorestore. Utilizaremos la base de datos de MovieLens, que contiene información de películas, usuarios y las votaciones de los usuarios a las películas. 1.
Descargamos el fichero con la base de datos y lo descomprimimos. 2.
Hacemos uso del siguiente comando para restaurarla: $ mongorestore <path>/movielens/ 3.
Iniciamos la consola de mongo y nos situamos en la base de datos: $ mongo > use movielens 4.
Comprobamos que se ha cargado todas las colecciones: > show collections movies system.indexes users 5.
Comprueba el formato de los documentos de las dos colecciones principales (movies y users). > db.movies.findOne() {...} > db.users.findOne() {...} Ejercicios: 1.
Buscar todos los datos de la película “Toy Story”: db.movies.find( { title: "Toy Story" } ) 2.
Buscar los títulos y los _id de todas las películas de la saga Star Wars (para buscar dentro de una cadena usar la siguiente notación: {campo: /tiene estas palabras/}): db.movies.find( { title: /Star Wars/ } , { title: 1 } ) 3.
Buscar los títulos las películas del año 1998: db.movies.find( { year: 1998 } , { title: 1, _id:0 } ) 4.
Contar cuántas películas hay del año 2000: db.movies.find( { year: 2000 } ).count() 5.
Buscar los títulos y el año de las películas anteriores a 1980: db.movies.find( { year: { $lt: 1980 } } , { title: 1, year: 1, _id: 0} ) 6.
Buscar los títulos y el año de las películas de los 90: db.movies.find( { year: { $gte: 1990, $lt: 2000 } } , { title:1, year: 1, _id:0 } ) 7.
Contar cuántas películas hay del siglo XXI: db.movies.find( { year: { $gte: 2001 } } ).count() 8.
Buscar las películas que contengan exactamente 100 votos: db.movies.find( { ratings: { $size: 100 } } ) 9.
Contar cuántas películas tienen exactamente 100 votos: db.movies.find( { ratings: { $size: 100 } } ).count() 10.
Buscar el título e _id de las películas de género “Romance”: db.movies.find( { genres: "Romance" } , { title: 1 } ) 11.
Buscar el título y los géneros de las películas que sean del género “Action” o “Comedy”: db.movies.find( { genres: { $in: [ "Action" , "Comedy" ] } } , { title: 1 , genres: 1 , _id: 0 } ) 12.
Buscar el título y los géneros de las películas que sean de los géneros “Action” y “Comedy”: db.movies.find( { genres: { $all: [ "Action" , "Comedy" ] } } , { title: 1 , genres: 1 , _id: 0} ) 13.
Buscar el título y los géneros de las películas que únicamente tengan los géneros “Action” y “Comedy”: db.movies.find( { $or: [ {genres: [ "Action" , "Comedy" ] } , { genres: [ "Comedy" , "Action" ] } ] } , { title: 1 , genres: 1 , _id: 0 } ) 14.
Buscar los títulos y años de las 5 películas más antiguas: db.movies.find({} , { title: 1 , year: 1 , _id: 0 }).limit(5).sort({ year: 1 }) 15.
Buscar los títulos y años de las 5 películas más recientes: db.movies.find({}, { title: 1 , year: 1, _id: 0 }).limit(5).sort({ year: ­1 }) 16.
Buscar, de dos formas diferentes, los títulos de las películas votadas por el siguiente usuario ObjectId("543baadd300440715aac2223"): db.users.find( { _id: ObjectId("543baadd300440715aac2223") } , { "ratings.movie.title" : 1 , _id: 0} ) db.movies.find( { "ratings.user_id": ObjectId("543baadd300440715aac2223") } , { title: 1 , _id: 0 } ) 17.
Contar cuántos hombres (“male”) y cuántas mujeres (“female”) hay: db.users.find( { gender: "male" } ).count() db.users.find( { gender: "female" } ).count() 18.
Buscar a las mujeres cuya edad sea mayor o igual que 20 y menor que 30: db.users.find( { gender: "female" , age: { $gte: 20 , $lt: 30} },{ age: 1 }) 19.
Buscar un usuario que tenga exactamente 500 votos: db.users.findOne( { ratings: { $size: 500 } } ) 20.
Buscar los _id de aquellos usuarios que hayan votado la película de “Toy Story”: db.users.find( { "ratings.movie.title": "Toy Story" } , { _id : 1 } ) db.movies.find( { title: "Toy Story" } , { "ratings.user_id": 1 , _id: 0 } ) 21.
Buscar los usuarios ordenados por edad de forma descendiente: db.users.find().sort( { age: ­1 } ) error: { "$err" : "Runner error: Overflow sort stage buffered data usage of 33554515 bytes exceeds internal limit of 33554432 bytes", "code" : 17144 } 22.
Buscar los datos de los usuarios, excluyendo los votos, que, o bien tenga como trabajo "academic/educator", o bien su zipcode sea "55113": db.users.find({$or: [{ ocupation: "academic/educator" },{ zipcode: "55113" }]}, { ratings: 0 } ) 23.
Buscar mujeres que hayan votado al menos una película de la década de los 50 y mostrar el nick del usuario así como el título y el año de una de las películas votadas de la década de los 50: db.users.find({ gender: "female", "ratings.movie.year": {$gte:1950,$lt:1960 }}, { ratings: {$elemMatch: {"movie.year": { $gte:1950, $lt:1960 } } } } ) 

Documentos relacionados