Instalar y probar Mongodb en Ubuntu Server

MongoDB forma parte de la familia de sistemas de base de datos NoSQL. En vez de guardar los datos en tablas como se hace en las base de datos relacionales, MongoDB guarda estructuras de datos en documentos tipo JSON con un esquema dinámico (MongoDB llama ese formato BSON), haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y rápida.

Para instalar mongodb conviene agregar los repositorios oficiales para tener la versión más actualizada y revisada por parte de mongodb.

Agregamos la clave

miguel@openstack:~$ sudo apt-key adv —keyserver hkp://keyserver.ubuntu.com:80 —recv 7F0CEB10

[sudo] password for miguel:
Executing: gpg —ignore-time-conflict —no-options —no-default-keyring —homedir /tmp/tmp.ZWV21g3CUM —no-auto-check-trustdb —trust-model always —keyring /etc/apt/trusted.gpg —primary-keyring /etc/apt/trusted.gpg —keyring /etc/apt/trusted.gpg.d/juju-stable.gpg —keyserver hkp://keyserver.ubuntu.com:80 —recv 7F0CEB10
gpg: solicitando clave 7F0CEB10 de hkp servidor keyserver.ubuntu.com
gpg: clave 7F0CEB10: clave pública “Richard Kreuter richard@10gen.com“ importada
gpg: Cantidad total procesada: 1
gpg: importadas: 1 (RSA: 1)

Agregamos el repositorio oficial de mongodb y refrescamos

echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’ | sudo tee /etc/apt/sources.list.d/mongodb.list

sudo apt-get update

Instalamos el paquete oficial:

miguel@openstack:~$ sudo apt-get install mongodb-org

Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
 mongodb-org-mongos mongodb-org-server mongodb-org-shell mongodb-org-tools
Se instalarán los siguientes paquetes NUEVOS:
 mongodb-org mongodb-org-mongos mongodb-org-server mongodb-org-shell
 mongodb-org-tools
0 actualizados, 5 se instalarán, 0 para eliminar y 3 no actualizados.
Necesito descargar 115 MB de archivos.
Se utilizarán 291 MB de espacio de disco adicional después de esta operación.
¿Desea continuar? [S/n] s

Una vez instalado comprobamos versión y si está corriendo

miguel@openstack:~$ mongo –version

MongoDB shell version: 2.6.6

miguel@openstack:~$ ps -fe | grep mongo

mongodb  16402     1  1 16:14 ?        00:00:07 /usr/bin/mongod --config /etc/mongod.conf

Podremos arrancar, parar y reiniciar como otro servicio más:

miguel@openstack:~$ sudo service mongod restart

[sudo] password for miguel:
mongod stop/waiting
mongod start/running, process 16444

Ver su log específico:

miguel@openstack:~$ ls -la /var/log/mongodb/

total 16 
drwxr-xr-x  2 mongodb mongodb 4096 dic 22 16:14 .
drwxrwxr-x 12 root    syslog  4096 dic 22 16:14 ..
-rw-r--r--  1 mongodb nogroup 5184 dic 22 16:27 mongod.log

Y la ubicación de sus datos:

miguel@openstack:~$ ls -la /var/lib/mongodb/

total 81936
drwxr-xr-x  3 mongodb mongodb     4096 dic 22 16:27 .
drwxr-xr-x 45 root    root        4096 dic 22 16:14 ..
drwxr-xr-x  2 mongodb nogroup     4096 dic 22 16:27 journal
-rw-------  1 mongodb nogroup 67108864 dic 22 16:27 local.0
-rw-------  1 mongodb nogroup 16777216 dic 22 16:27 local.ns
-rwxr-xr-x  1 mongodb nogroup        6 dic 22 16:27 mongod.lock

Consola Mongodb

Para entrar en la consola de mongodb basta con ejecutar “mongo”

miguel@openstack:~$ mongo

MongoDB shell version: 2.6.6
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
>

Para insertar datos , podremos hacerlo con la sentencia db.nombredetabla.insert(contenido). Los documentos se definen como los objetos Javascript, u objetos JSON.

db.trabajadores.insert({

… nombre : ‘Carlos’,

… apellidos: ‘Hernández García’,

… puesto : ‘Contable’,

… etiquetas: [‘Administración’ , ‘Contabilidad’]

});

WriteResult({ "nInserted" : 1 })

O también como una variable:

 

> var Fernando = {

… nombre : ‘Fernando’,

… apellidos: ‘Sánchez Pérez’,

… etiquetas : [‘Desarrollo’,’Consultor’]

… };

 

> db.trabajadores.insert(Fernando);

 

WriteResult({ "nInserted" : 1 })

Insertando incluso estructuras que no tienen porqué ser iguales en la misma colección de datos:

> db.trabajadores.insert({

… nombre : ‘Diana’,

… apellidos: ‘Sanz Martínez’,

… etiquetas: ‘RRHH’,

… gestiona: [‘Alberto’,’Fernando’,’Carlos’]

});

> WriteResult({ "nInserted" : 1 })

Podemos ver nuestra colección de datos mostrando las “colecciones” :

> show collections

system.indexes
trabajadores

Una búsqueda simple de todos los trabajadores podría ser:

db.trabajadores.find();

{ "_id" : ObjectId("549840757f1b1f85231f6f47"), "nombre" : "Carlos", "apellidos" : "Hernández García", "puesto" : "Contable", "etiquetas" : [ "Administración", "Contabilidad" ] }
{ "_id" : ObjectId("5498420e7f1b1f85231f6f48"), "nombre" : "Fernando", "apellidos" : "Sánchez Pérez", "etiquetas" : [ "Desarrollo", "Consultor" ] }
{ "_id" : ObjectId("549843bb7f1b1f85231f6f49"), "nombre" : "Diana", "apellidos" : "Sanz Martínez", "etiquetas" : "RRHH", "gestiona" : [ "Alberto", "Fernando", "Carlos" ] }

O con filtros:

db.trabajadores.find({ etiquetas: ‘RRHH’});

{ "_id" : ObjectId("549843bb7f1b1f85231f6f49"), "nombre" : "Diana", "apellidos" : "Sanz Martínez", "etiquetas" : "RRHH", "gestiona" : [ "Alberto", "Fernando", "Carlos" ] }

A esta opción find, pueden agregarse otros filtros como .sort() para ordenar, .limit() para limitar.. aquí algunas opciones para filtrar:

  • --out – se especifica un directorio distinto al por defecto dump/ para que se almacene el respaldo.
  • --port – se especifica un puerto, en caso que no se utilice el por defecto 27017.
  • --host – se especifica la dirección donde reside la instancia, en caso que no se utilice el por defecto localhost.
  • --db – se especifica una base de datos particular en lugar de tomar todas.
  • --collection – usado en conjunto con --db se especifica una colección particular que se quiera extraer de dicha base de datos.
  • --dbpath – se especifica el directorio que contiene los archivos de las bases de datos. Esto es sumamente útil en caso de que el proceso de mongod no esté ejecutandose ya que podemos acceder directamente a sus archivos.
  • --username y --password – permite especificar credenciales de usuario en caso de que estas sean requeridas.

Eliminar Datos

Para eliminar entradas podremos hacerlo de igual forma pero con remove()

db.trabajadores.remove({ nombre: ‘Carlos’});

WriteResult({ "nRemoved" : 1 })

Backup y Restauracion

Antes de nada, conviene asegurarnos que estamos usando la base de datos con la que queremos trabajar.

> use trabajadores

switched to db trabajadores

Aunque podremos hacer un dump de cualquier base de datos (–db) a un directorio concreto (–out) en lugar del ./dump donde se guarda si no indicamos nada, una colección en particular de la base de datos (–collection)

miguel@openstack:~$ sudo mongodump –db trabajadores –out /home/

connected to: 127.0.0.1
2014-12-23T10:12:15.030+0100 DATABASE: trabajadores to /home/trabajadores
2014-12-23T10:12:15.031+0100 trabajadores.system.indexes to /home/trabajadores/system.indexes.bson
2014-12-23T10:12:15.032+0100 1 documents
2014-12-23T10:12:15.033+0100 trabajadores.trabajadores to /home/trabajadores/trabajadores.bson
2014-12-23T10:12:15.033+0100 3 documents
2014-12-23T10:12:15.034+0100 Metadata for trabajadores.trabajadores to /home/trabajadores/trabajadores.metadata.json

miguel@openstack:~$ ls -lah /home/trabajadores/

total 20K
drwxr-xr-x 2 root root 4,0K dic 23 10:10 .
drwxr-xr-x 4 root root 4,0K dic 23 10:05 ..
-rw-r--r-- 1 root root   80 dic 23 10:12 system.indexes.bson
-rw-r--r-- 1 root root  442 dic 23 10:12 trabajadores.bson
-rw-r--r-- 1 root root  107 dic 23 10:12 trabajadores.metadata.json

Opciones comunes del backup mongodb “mongodump”:

  • –out – se especifica un directorio distinto al por defecto dump/ para que se almacene el respaldo.
  • –port – se especifica un puerto, en caso que no se utilice el por defecto 27017.
  • –host – se especifica la dirección donde reside la instancia, en caso que no se utilice el por defecto localhost.
  • –db – se especifica una base de datos particular en lugar de tomar todas.
  • –collection – usado en conjunto con –db se especifica una colección particular que se quiera extraer de dicha base de datos.
  • –dbpath – se especifica el directorio que contiene los archivos de las bases de datos. Esto es sumamente útil en caso de que el proceso de mongod no esté ejecutandose ya que podemos acceder directamente a sus archivos.
  • –username y –password – permite especificar credenciales de usuario en caso de que estas sean requeridas.

Para restaurar un dump de una base de datos mongodb podemos hacer lo siguiente:

> use trabajadores

switched to db trabajadores

> db.dropDatabase()

{ "dropped" : "trabajadores", "ok" : 1 }

> show dbs

admin  (empty)
local  0.078GB
test   0.078GB

Y proceder a restaurar sin que haya una base de datos anterior. Este paso se realiza fuera de la consola “mongo”:

miguel@openstack:/home/trabajadores$ mongorestore /home/trabajadores

connected to: 127.0.0.1
2014-12-23T12:07:20.219+0100 /home/trabajadores/trabajadores.bson
2014-12-23T12:07:20.220+0100 going into namespace [trabajadores.trabajadores]
3 objects found
2014-12-23T12:07:20.221+0100 Creating index: { key: { _id: 1 }, name: "_id_", ns: "trabajadores.trabajadores" }

Comprobamos que se ha importado y continene nuestros anteriores datos:

miguel@openstack:/home/trabajadores$ mongo

MongoDB shell version: 2.6.6
connecting to: test

> show dbs

admin         (empty)
local         0.078GB
test          0.078GB
trabajadores  0.078GB

> use trabajadores

switched to db trabajadores

> db.trabajadores.find();

{ "_id" : ObjectId("5499313cce0e47ec4e0a2224"), "nombre" : "Diana", "apellidos" : "Sanz Martínez", "etiquetas" : "RRHH", "Trabajadores_a_cargo" : [ "Alberto", "Fernando", "Carlos" ] }
{ "_id" : ObjectId("54993162ce0e47ec4e0a2225"), "nombre" : "Fernando", "apellidos" : "Sánchez Pérez", "etiquetas" : [ "Desarrollo", "Consultor" ] }
{ "_id" : ObjectId("54993174ce0e47ec4e0a2226"), "nombre" : "Carlos", "apellidos" : "Hernández García", "puesto" : "Contable", "etiquetas" : [ "Administración", "Contabilidad" ] }

http://www.mongodb.org/

http://es.wikipedia.org/wiki/MongoDB

 

Anuncios

Deja un comentario...dicen que es gratis!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s