Skip to content

Instantly share code, notes, and snippets.

@ualmtorres
Last active December 14, 2023 17:03
Show Gist options
  • Save ualmtorres/c04eaaa15789bfef2ebec3f9bcf820a6 to your computer and use it in GitHub Desktop.
Save ualmtorres/c04eaaa15789bfef2ebec3f9bcf820a6 to your computer and use it in GitHub Desktop.
Script MongoDB Introduccion
// Distinción entre mayúsculas y minúsculas
{"saludo": "Hola a todos", "Saludo": "Hello world"}
// Documento no legal si hay claves duplicadas
{"nota": 10, "nota": 8}
/*
* Shell de MongoDB
*/
dias = 365
dias / 30
function factorial (n) {
if (n <= 1) return 1;
return n * factorial (n - 1);
}
factorial (5)
/*
* insert() y find()
*/
doc = {name: "Juan", age: 40, profesion: "fontanero"}
db
db.people.insertOne(doc)
db.people.find()
db.people.insertOne({name: "Luisa", age: 45, profesion: "cocinera"})
db.people.insertOne({name: "Susana", age: 19, hobbies: ["futbol", "cine", "teatro"]})
db.people.insertOne({name:"Antonio", age:24, hobbies:["futbol", "tenis"]})
db.people.find()
/*
* find() con parámetros
*/
db.people.find({_id: ObjectId("53f066ff17e2b0c98e498cd3")})
db.people.find({_id: ObjectId("53f066ff17e2b0c98e498cd3")}, {name:true})
db.people.find({_id: ObjectId("53f066ff17e2b0c98e498cd3")}, {name:false})
db.people.find({profesion: "fontanero"}, {_id:false})
/*
* $exists() para determinar si existe un campo
*/
db.people.find({hobbies:{$exists:true}}).pretty()
/*
* Ejecución de JavaScript para poblar una colección
*/
var types = ["examen", "trabajo automono", "prueba de nivel"];
for (student_id = 0; student_id < 1000; student_id++) {
for (type = 0; type < 3; type++) {
var r = {student_id:student_id, type:types[type], score:Math.round(Math.random()*100)};
db.scores.insertOne(r)
}
}
db.scores.countDocuments()
db.scores.find();
/*
* Inserción con datos anidados
*/
for (student_id = 0; student_id < 1000; student_id++) {
var c = {};
for (type = 0; type < 3; type++) {
c[types[type]] = Math.round(Math.random()*100);
}
var r = {student_id:student_id, scores:c};
db.nestedscores.insertOne(r);
}
db.nestedscores.countDocuments();
db.nestedscores.find();
/*
* find() con varios criterios
*/
db.scores.find({student_id: 19, type: "examen"}).pretty()
db.scores.find({$or:[{student_id:19}, {student_id: 20}], type:"examen"}).pretty()
db.scores.find({student_id: 19, type: "examen"}, {_id: false}).pretty()
/*
* findOne() para recuperar sólo un documento
*/
db.scores.findOne()
db.scores.findOne({'type': 'prueba de nivel'})
/*
* Documentos embebidos
*/
{
"nombre": "Juan Pérez",
"direccion": {
"calle": "Paseo de Almería, 1",
"cp": "04001"
"ciudad": "Almería"
}
}
/*
* Operadores de comparación
*/
db.scores.find({"score":{"$gt":98}})
db.scores.find({"score":{"$gt":98}, "type":"examen"})
db.scores.find({"score":{"$gt":98, "$lte":99}, "type":"examen"})
db.people.find({name: {$gt: 'M'}});
/*
* Uso de arrays
*/
db.people.find({hobbies:"futbol"}).pretty()
db.people.find({hobbies:["futbol", "cine"]})
db.people.find({hobbies:{$in:["futbol", "cine"]}}).pretty()
db.people.find({$or:[{hobbies:"futbol"}, {hobbies:"cine"}]}).pretty()
db.people.find({hobbies:{$all:["futbol", "cine"]}}).pretty()
/*
* exists
*/
db.people.find({hobbies: {$exists: true}})
/*
* Búsqueda de subelementos con notación punto
*/
db.nestedscores.find({ 'scores.examen': 100} )
db.countries.insert({
_id : "us",
name : "United States",
exports : {
foods : [
{ name : "bacon", tasty : true },
{ name : "burgers" }
]
}
})
db.countries.insert({
_id : "ca",
name : "Canada",
exports : {
foods : [
{ name : "bacon", tasty : false },
{ name : "syrup", tasty : true }
]
}
})
db.countries.insert({
_id : "mx",
name : "Mexico",
exports : {
foods : [
{name : "salsa", tasty : true, condiment : true}
]
}
})
db.countries.find({"exports.foods.name":"bacon"}).pretty()
db.countries.find({"exports.foods.name":"bacon"}, {name:true, _id:false})
/*
* $elemMatch para comparar subelementos. NO EQUIVALE A UN AND
*/
db.countries.find({"exports.foods.name":"bacon", "exports.foods.tasty":true}, {name:true, _id:false})
db.countries.find({"exports.foods": {
$elemMatch: {
"name": "bacon",
"tasty":true
}
}}, {name:true, _id:false})
/*
* Modificación de un campo
*/
db.people.find({},{_id:false})
db.people.updateOne({name: "Juan"}, {$set:{profesion: "antenista"}})
db.people.replaceOne({name: "Juan"}, {name: "Juan Antonio", profesion: "fontanero"})
/*
* Convertir campos en arrays y añadir un valor
*/
db.people.updateOne({name:"Luisa"}, {$set:{profesion:["modista"]}})
db.people.updateOne({name:"Luisa"}, {$addToSet:{profesion:"cocinera"}})
/*
* Añadir elementos a un array - $push() y $pushAll()
*/
db.people.updateOne({name: "Luisa"}, {$push:{profesion: "peluquera"}})
db.people.updateOne({name: "Luisa"}, {$push:{profesion: {$each: ["cajera", "administrativa"]}}})
/*
* Sacar elementos de un array - $pull() y $pullAll()
*/
db.people.update({name: "Luisa"}, {$pull:{profesion: "peluquera"}})
db.people.update({name: "Luisa"}, {$pullAll:{profesion: ["cajera", "administrativa"]}})
/*
* Sacar el primer (-1) o el último (1) elemento de un array - $pop()
*/
db.people.updateOne({name: "Luisa"}, {$pop:{profesion: 1}})
/*
* Actualizar varios documentos a la vez
*/
db.people.updateMany({}, {$set:{livesIn: "Almeria"}})
/*
* Incrementar valores numéricos – $inc()
*/
db.people.updateOne({name: "Luisa"}, {$inc: {age: 5}})
/*
* Eliminación de campos - $unset
*/
db.people.updateMany({profesion: "fontanero"}, {$unset:{profesion: "fontanero"}})
/*
* Eliminación de documentos - remove()
*/
db.people.deleteOne({name: "Juan Antonio"})
/*
* Ordenación - sort()
*/
db.people.find({}, {_id:false}).sort({name:1})
/*
* limit() y skip()
*/
db.people.find({}, {_id:false}).sort({name:1}).limit(2)
db.people.find({}, {_id:false}).sort({name:1}).skip(1).limit(2)
/*
* upsert: Inserta si no hay nada que actualizar
*/
db.people.updateMany({livesIn: "Granada"}, {$set: {name: "Francisca", profesion: ["comercial"], age:52}}, {upsert:true})
/*
* id compuesto
* El _id no tiene por que ser siempre un valor numérico ni un valor simple
*/
db.prueba.insertOne(
{
'_id': {'nombre':' Manuel', 'apellidos': 'Torres Gil'},
'profesion': 'profesor'
}
);
db.prueba.find();
/*
* Pero dará error si lo volvemos a introducir porque intenta crear una
* entrada duplicada en el índice
*/
db.prueba.insertOne(
{
'_id': {'nombre':' Manuel', 'apellidos': 'Torres Gil'},
'profesion': 'profesor'
}
);
/*
* Búsquedas aproximadas
*/
db.users.insertOne({name: 'paulo'})
db.users.insertOne({name: 'patric'})
db.users.insertOne({name: 'pedro'})
db.users.find({name: /a/}) //like '%a%'
// out: paulo, patric
db.users.find({name: /^pa/}) //like 'pa%'
// out: paulo, patric
db.users.find({name: /ro$/}) //like '%ro'
// out: pedro
db.users.find({name: /RIC$/i}) //like '%ric' Case insensitive
// out: patric
db.users.find({name: /^p.*o$/}) //like 'p%o'
// out: paulo, pedro
db.users.find({name: /(^pau)|(^pat)/}) //like 'pau%' or like 'pat%'
// out: paulo, patric
/*
* El método count()
*/
// Cuántos documentos almacena scores
db.scores.countDocuments()
// Cuántos documentos hay de tipo examen con nota superior a 95
db.scores.countDocuments({type: 'examen', score:{$gt: 95}})
/*
* distinct()
*/
// Profesiones diferentes almacenadas
db.people.distinct('profesion')
// Profesiones diferentes de las personas que viven en Almería
db.people.distinct('profesion', {livesIn: 'Almeria'})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment