lunes, 16 de febrero de 2015

Tutorial primeros pasos en Mongo

Tutorial primeros pasos en Mongo

Este tutorial está enfocado a personas con conocimientos de Linux, JavaScript y JSON.
MongoDB es una base de datos documental (NoSQL - Not Only SQL) organizada en bases de datos (como las bases de datos de MySQL o algo similar a los Schemas de Oracle). A su vez las bases de datos se organizan en colecciones (lo que en relacional serían las tablas).
Mongo está muy relacionado con el mundo JavaScript y NodeJS porque la información que almacena y gestiona está en formato JSON.
Recordamos que JSON (JavaScript Object Notation) es un objeto JavaScript con el formato:
 { clave: valor }
Imagina que quieres almacenar una "persona", pues un ejemplo de este objeto sería:
{
 "Nombre":"John",
 "Apellidos":"Doe",
 "DNI":"12345678Z",
 "FechaNac": "01-01-1980",
 "Sexo": "V"
}

Si complicamos esto un poco, una lista de personas sería (fíjate en la coma):
{
 "Nombre":"John",
 "Apellidos":"Doe",
 "DNI":"12345678Z",
 "FechaNac": "01-01-1980",
 "Sexo": "V"
} ,
{
 "Nombre":"Pepa",
 "Apellidos":"Pérez",
 "DNI":"87654321X",
 "FechaNac": "01-01-1980",
 "Sexo": "M"
}

Estos objetos se pueden asignar directamente a una variable en JavaScript y luego acceder a ellos como atributos, ejemplo:
<script>
var unaPersona =  {
"Nombre":"John",
"Apellidos":"Doe",
"DNI":"12345678Z",
"FechaNac": "01-01-1980",
"Sexo": "V"
 };
 document.write(unaPersona.Nombre);
</script>

Instalación

Suponemos que partimos de una máquina Linux 64 bits (por defecto Mongo en 32 bits no tiene activado el journaling para recuperarse de errores inesperados).
Podemos descargar el servidor de su Web o bien instalarlo desde el gestor de paquetes de nuestra distribución.
Nosotros tenemos un equipo basado en Ubuntu, así que usamos el comando:
$ sudo apt-get install mongodb mongodb-clients mongodb-server

Probando el servidor

Para conectar a la base de datos "local" de nuestro servidor, abrimos una terminal y escribimos en la consola:
juangu@pegasus:~$ mongo
MongoDB shell version: 2.0.4
connecting to: test
> show dbs
local    0.0625GB
> use local

switched to db local
  • El comando "show dbs" nos mostrará las bases de datos que tenemos en el servidor y el espacio ocupado.
  • El comando "use local", es similar al de MySQL e indica al cliente que use la base de datos "local".

Consultando las colecciones de documentos disponibles 

Para operar sobre una colección seguimos la nomenclatura "db.nombreColeccion.operacion()", como podemos ver en este ejemplo:
> use local
> show collections
system.indexes
testData
> db.testData.find()
{ "_id" : ObjectId("54e0ea85d8d26ebe65f13132"), "name" : "mongo" }
{ "_id" : ObjectId("54e0ea85d8d26ebe65f13133"), "x" : 3 }
>

Insertando datos 

Para insertar datos, éstos deben ser cadenas JSON ( clave: valor ), podemos almacenarlos en una variable y luego, insertar la variable en la colección:
> use local
> j = { name : "mongo" } 
> k = { x : 3 }
> db.testData.insert( j ) db.testData.insert( k )

Cargando ficheros JSON desde el sistema de archivos

Guardamos esta cadena (string) JSON en el fichero personas.json:
  • {
    • "People":
    • [
      • {
        • "nombre": "Manuel",
        • "apellidos": "Pérez",
        • "fecha_nacimiento": "1982-03-03",
        • "altura": 1.80,
        • "activo": true,
        • "intereses":["fútbol","tenis"],
        • "tarjeta_credito": null,
        • "dni":
        • {
          • "numero":"465464646J",
          • "caducidad":"2013-10-21"
        • }
      • },
      • {
        • "nombre": "Sara",
        • "apellidos": "Ruano",
        • "fecha_nacimiento": "1985-12-03",
        • "altura": 1.65,
        • "activo": false,
        • "intereses":["moda","libros","fotografía","política"],
        • "tarjeta_credito": null
      • }
    • ]
  • }

Cargamos el fichero desde la shell mongo (¡ojo! lo que tenemos en el fichero es un string y hay que convertirlo en objeto, de ahí el "JSON.parse()"):
> use local
> ls()
[ "./personas.json" ]
> gente=cat("./personas.json");

> db.personas.insert(JSON.parse(gente));
> db.personas.find();
{ "_id" : ObjectId("54e1c092eda758b3eb9c5389"), "People" : [     {     "nombre" : "Manuel",     "apellidos" : "Pérez",     "fecha_nacimiento" : "1982-03-03",     "altura" : 1.8,     "activo" : true,     "intereses" : [     "fútbol",     "tenis" ],     "tarjeta_credito" : null,     "dni" : {     "numero" : "465464646J",     "caducidad" : "2013-10-21" } },     {     "nombre" : "Sara",     "apellidos" : "Ruano",     "fecha_nacimiento" : "1985-12-03",     "altura" : 1.65,     "activo" : false,     "intereses" : [     "moda",     "libros",     "fotografía",     "política" ],     "tarjeta_credito" : null } ] }
>

Bibliografía

No hay comentarios:

Publicar un comentario