Mongo DB
Mongo DB
Mongo DB
Aportando:
Hay una serie de conceptos que conviene conocer antes de entrar en detalle
var yo = {
nombre: "Aitor",
apellidos: "Medrano",
fnac: new Date("Oct 3, 1977"),
hobbies: ["programación", "videojuegos", "baloncesto"],
casado: true,
hijos: 2,
fechaCreacion = new Timestamp()
}
Este identificador es global, único e inmutable. Esto es, no habrá dos repetidos y una vez un
documento tiene un _id, éste no se puede modificar.
update hace un reemplazo de los campos, es decir, si en el origen había 100 campos y en
el update sólo ponemos 2, el resultado sólo tendrá 2 campos. ¡Cuidado que puede ser muy
PELIGROSO!
Ejemplo upsert
>db.books.update( {title:"Horizontes Lejanos"},
{lang:"es", autor:"Anonimo", year:1805, price:20.00},
{upsert: true}
)
Ejemplo $set
> db.books.update( {title:"Horizontes Lejanos"},
{$set: {price: 100.00}}
)
> db.books.drop()
> db.books.find()
> db.books.findOne()
> db.books.find().pretty()
> db.books.find({lang:{$ne:"es"}})
> db.books.find({"price":{$exists:true}})
> db.people.find({nombre:/Aitor/})
> db.people.find({nombre:/aitor/i})
> db.people.find({nombre: {$regex:/aitor/i}})
Por ejemplo, para averiguar los productos que cuestan más de 10.000 y que tienen una
calificación igual a 5 o superior haríamos:
> db.catalogo.find({"precio":{$gt:10000},
"reviews.calificacion":{$gte:5}}
)
Estos operadores trabajan con arrays, donde cada uno de los elementos es un documento
con la condición a evaluar, de modo que se realiza la unión entre estas condiciones,
aplicando la lógica asociada a AND y a OR.
Finalmente, si queremos indicar mediante un array los diferentes valores que puede cumplir
un campo, podemos utilizar el operador $in:
Así pues, si quisiéramos obtener las personas que tienen más de un hijo, y que de esas
personas, en vez de mostrar todos sus hobbies, mostrase los dos primeros, haríamos:
> db.grades.distinct('type')
[ "exam", "quiz", "homework" ]
Si queremos filtrar los datos sobre los que se obtienen los valores, le pasaremos un
segundo parámetro con el criterio a aplicar:
> db.grades.count({type:"exam"})
> db.grades.find({type:"exam"}).count()
> db.grades.count({type:"essay", score:{$gt:90}})
> db.people.group( {
key: { hijos: true },
reduce: function ( item, prev ) {
prev.total += 1;
},
initial: { total : 0 }
} )
En la siguiente imagen se resumen los pasos de una agrupación donde primero se eligen
los elementos que vamos a agrupar mediante $match y posteriormente se agrupan con
$group para hacer $sum sobre el total
> db.productos.aggregate([{$group:
{
_id: "$fabricante",
total: { $sum:1 }
}
}])
> db.productos.aggregate([{$group:
{
_id: { "empresa": "$fabricante" },
total: { $sum:1 }
}
}])
> db.productos.aggregate([{$match:{categoria:"Tablets"}}])
Por ejemplo, para ordenar los productos por precio descendentemente haríamos:
> db.productos.aggregate({$sort:{precio:-1}})
> db.productos.aggregate([{$limit:3}])
Este operador no modifica los documentos, sólo restringe quien pasa a la siguiente fase.
> db.productos.aggregate([{$skip:3}])
> db.enlaces.aggregate(
{$match:{titulo:"www.google.es"}},
{$unwind:"$tags"})
Obtenemos:
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "mapas" }
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "videos" }
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "blog" }
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "calendario"
}
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "email" }
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "mapas" }
Para importar ficheros existe el comando teclea este comando mongoimport que se teclea
en la terminal
En nuestro caso