mongo db (1): introducción

Primera entrada de una serie dedicada a mongodb

Maria Sollosi

archivado en: JavaScript / 1 marzo, 2015 / taller:

Comienzo con esta entrada una serie sobre mongo db, una base de datos no relacional, pero antes necesito aclarar lo que entiendo por series en este blog; esto es, un conjunto de entradas más o menos ordenadas por complejidad de aprendizaje sobre algún tema sobre el que me interesa escribir en este momento, un período que puede durar dos semanas o dos años o lo que sea. Y tras esta advertencia, al lío : ).

Mongo db es una base de datos orientada a documentos, el equivalente a las filas de una base relacional, que podemos imaginar como un json mastodóntico, es decir, como una colección de pares de clave-valor, donde el valor puede ser cualquier cosa almacenable, como una cadena, un número, un array o incluso otro json.

Esto supone que, a diferencia de las bases de datos relacionales, no tiene un filtro de integridad en los registros. Así, por ejemplo, mientras que en MySql si hemos definido una columna como numérica, no dejará que se almacenen ahí cadenas, en mongo la misma clave puede albergar en un sitio un número y en otro una cadena de texto.

A cambio, se consigue una gran flexibilidad: no, no hace falta tenerlo toooooodo definido de antemano; si algo cambia con el paso del tiempo, la bbdd se puede adaptar con gran facilidad, lo que hace de mongo un sistema formidable cuando no tenemos clara la arquitectura ni la envergadura de una aplicación, como sucede cuando aplicamos metodologías ágiles o en los tratamientos de big data.

Se pueden sopesar además otros criterios para decantarse por un sistema u otro, como la mayor velocidad de respuesta que da mongo o su integración en el ecosistema javaScript, pero creo que la clave de la cuestión se encuentra en el tremendo potencial de su escabilidad.

Ideas básicas

La unidad básica de una base mongo es el documento (document), el equivalente a una fila en una bbdd relacional., que es un conjunto de pares clave-valor:

{"foo": "bar"}

{"foo": "bazinga"}

Las claves pueden contener casi cualquier carácter UTF8, menos el . y el $, que se reservan para casos especiales que veremos más adelante. Son case sensitive (foo no es lo mismo que FOO) y no pueden repetirse dentro del mismo documento. Es decir, esto sería incorrecto (como también lo sería en mysql si repetimos el nombre de las columnas).

{"foo": "bar", "foo": "bazinga"}

Los documentos se agrupan en colecciones (collections), que pueden denominarse de cualquier manera, salvo que no pueden empezar por .system. ni contener el carácter $. Aunque cada colección puede contener documentos heterogéneos, conviene que sean lo más uniforme posible.

A su vez, las colecciones e agrupan en bases de datos (databases), que son instancias de MongoDB. A diferencia de las colecciones y los documentos, el nombre de las bbdd es más restringido y no puede contener ni un espacio en blanco ni ninguno de estos caracteres: /, \, ., ", *, <, >, :, |, ?, $.

Además, hay tres nombres reservados: admin, local y config, que se corresponden a cosas especiales que veremos más adelante.

Instalación

Lo primero es descargarse la bbdd e instalarla, aunque también podemos utilizar una bbdd que nos proporciona gratuitamente mongolab.

La instalación sobre windows es sencilla: creamos un directorio en c: denominado mongodb y otro llamado data, donde creamos a su vez un subdirectorio llamado db, que es donde se guardarán nuestras bases de datos.

Pulsamos el archivo de mongo que nos hemos descargado y seleccionamos instalación personalizada (custom) y en la ventana emergente indicamos que se instale en el directorio mongodb que hemos creado.

Ahora, si abrimos la consola de windows y escribimos:

C:\mongodb\bin\mongod.exe

(Si estamos usando una consola linuxeada, como la de git, hay que invertir las barras).

Ale op, el tinglado se pone en marcha y mongo se queda a la escucha en el puerto 27017...

...

2015-02-27T20:04:10.216+0100 I NETWORK [initandlisten] waiting for connections
on port 27017

como podemos comprobar si vamos a localhost:27017 por el navegador

It looks like you are trying to access MongoDB over HTTP on the native driver port.

Ahora conviene hacer dos cosas más, pero debemos hacerlas con la consola con permisos de administrador, ojo. La primera es definir un sitio donde guardar los logs, es decir, la información que nos dará mongo sobre las conexiones contra las bases de datos. Para eso creamos una carpeta llamada log en el directorio mongodb y ejecutamos esta sentencia.

echo logpath=C:\mongodb\log\mongo.log > "C:\mongodb\mongod.cfg"

Ale op, ahora en el directorio C:\mongodb\log\ especificado den el logpath nos irá indicando toda la información en el archivo mongo.log.

Y lo segundo que podemos hacer es configurar mongo como servicio, para que sea más fácil arrancarlo y pararlo. Para eso es tan sencillo como ejecutar esta sentencia en la consola:

"C:\mongodb\bin\mongod.exe" --config "C:\mongodb\mongod.cfg" --install

Esto que hemos hecho por consola, equivale a crear un archivo de configuracion mongod.cfg con datos parecidos a estos.

logpath=c:\mongodb\log\mongod.log

dbpath=c:\data\db

Ahora escribiendo net start MongoDB o net stop MongoDB podemos poner en marcha o detener el motor de mongo.

Hola mundo... o parecido

Bueno, pues para terminar esta primera entrada dedicada a mongo db, vamos a hacer el equivalente a un Hola mundo en basededatosiano.

Mongodb cuenta con un poderoso shell o intérprete de línea de comandos que podemos poner en marcha navegando por consola hasta el directorio donde lo hemos instalado y luego ejecutando el comando mongo (también se puede preparar un atajo añadiendo una variable de sistema).

marcos@LaMaquina /c/mongodb/bin

$ mongo

En el shell de mongo podemos ejecutar javaScript...

> x = "Hola Mundo"

Hola Mundo

> x.replace("Hola", "Adios")

Adios Mundo

... Y, claro está, mongo : ).

Para crear una base de datos es tan sencillo como indicarle a mongo que la «use» con el comando de este nombre. Si no existe, la crea.

> use foo

switched to db foo

> db

foo

Ahora podemos usar foo a partir del objeto db usando la notación de puntos. Vamos a insertar un registro:

/* Creamos el documento */

saludo = {"bar":"Hola Mundo"}

/* Lo insertamos en foo*/

db.foo.insert(saludo)

WriteResult({ "nInserted" : 1 })

/* Y lo leemos : ) */

db.foo.findOne()

{ "_id" : ObjectId("54f0cb3dc4c9c2995a0893f7"), "bar" : "Hola Mundo" }
>

Bueno, en la próxima entrada veremos cosas más divertidas. Por hoy está bien.

|| Tags: ,

valoración de los lectores sobre mongo db (1): introducción

  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • 5 sobre 5 (2 votos)

¿Te ha parecido útil o interesante esta entrada?
dormido, valoración 1 nadapensativo, valoración 2 un poco sonrisa, valoración 3 a medias guiño, valoración 4 bastante aplauso, valoración 5 mucho

Tú opinión es muy importante, gracias por compartirla!

Los comentarios están cerrados.