Vous êtes sur la page 1sur 10

Bases de Datos orientadas a Documentos

Concepto
Una base de datos documental est constituida por un conjunto de programas que
almacenan, recuperan y gestionan datos de documentos o datos de algn modo
estructurados. Este tipo de bases de datos constituyen una de las principales subcategoras
dentro de las denominadas bases de datos No SQL. A diferencia de las bases de datos
relacionales, estas bases de datos estn diseadas alrededor de una nocin abstracta de
"Documento".

Este tipo de base de datos est orientada exclusivamente a gestionar de forma efectiva el
almacenamiento y acceso a documentos. Las bases de datos orientadas a documentos no
almacenan datos en esquemas estrictos ni usan tablas con campos uniformes.

Obviamente, los documentos son el concepto principal en las bases de datos NoSQL
basadas en documentos. La base de datos almacena y recupera documentos, que pueden
ser XML, JSON, BSON o muchos otros. Estos documentos son estructuras de datos
jerrquicas auto describibles que pueden contener mapeos, colecciones o valores
escalares. Los documentos almacenados son similares unos a otros pero no tienen que ser
en s exactamente iguales.

Bases de Datos Orientadas a Documentos

A diferencia de las bases de datos relacionales, las bases de datos orientadas a


documentos no almacenan datos en tablas un conjunto homogneo de documentos que
con campos uniformes para cada fila o pueden encontrarse en cualquier soporte registro
(no tiene un esquema estricto). (Papel, magntico, ptico, etc.)Este tipo de base de datos
est orientada exclusivamente a almacenar y gestionar documentos. Cada documento es
almacenado de forma que tenga ciertas caractersticas, cualquier nmero o tipo de
campos pueden ser aadidos a un documento, e incluso contener varios tipos de datos.

Dentro las bases de datos orientadas a documentos se hace un uso intensivo de pares
clave/valor, considerndose a la base como un conjunto de identificadores y documentos,
y los documentos a su vez como un conjunto de campos y valores.

Los pares clave/valor son muy usados en cloud computing (computacin de la nube), un
buen ejemplo de esto es el algoritmo Map/ Reduce; adicionalmente las bases de datos
documentales pueden ser consideradas tambin como tablas hash y son optimizadas para
datos accedidos mediante clave primaria.
El no contar con una estructura estricta las hace ms eficientes al momento de manejar
grandes volmenes de documentos. Y la ausencia de relaciones, facilita la replicacin de
datos, pero denota la dificultad para modelos complejos.

Funciones bsicas del anlisis documental.


Entre las funciones bsicas del documental se encuentran el:

Almacenar la informacin documental y


Facilitar su recuperacin.

Conceptos bsicos del anlisis documental


Dos elementos importantes dentro del anlisis documental son:

La indexacin y
El lenguaje Documental

Ventajas
No estn sujetas a esquemas estrictos
Poseen un lenguaje de consulta orientado al lenguaje natural
Extrema sencillez en el escalado horizontal.

Ejemplo de diferencias de SQL y NoSQL


A continuacin se muestra un ejemplo de las diferencias de almacenamiento y tratamiento
entre las bases de datos relacionales y no relacionales.

Base de datos orientada a documentos:

Base de Datos Relacional:


En el ejemplo podemos ver que en la base de datos NoSQL, los campos vacos no se
aaden y que se pueden aadir campos concretos a documentos concretos, sin tener que
aumentar el nmero de columnas.

Ejemplificacin de una BD documental


Si bien existen muchas bases de datos basadas en documentos especializadas, se usar
MongoDB para ejemplificar su funcionamiento.

Instalaciones
Instalacin de MongoDB en MS Windows

1. Obtener el instalador para Windows del centro de descargas.

2. Iniciar el instalador como administrador.

3. Crear la carpeta de almacenamiento y configuracin de MongoDB.

Dar permisos escritura y lectura a estas carpetas.

C:\data
C:\data\db

4. (Opcional) Crear las carpeta de almacenamiento en una ruta segura ejemplo:

D:\mongodb\data\db

5. Iniciar el servidor del servicio de MongoDB: mongod.

C:\mongodb\bin\mongod.exe

6. (Opcional) Si se usa una ruta personalizada se debe pasar un parmetro con la ruta
al iniciar el servidor de mongo.

C:\mongodb\bin\mongod.exe --dbpath D:\mongodb\data\db

7. Iniciar el shell de mongo.

C:\mongodb\bin\mongo.exe
Instalacin de MongoDB en Linux Ubuntu
A partir de la versin 3.0, MongoDB se puede instalar de una forma ms fcil en Linux

Ubuntu Elementary OS.

1. Importando la clave pblica usada por el sistema gestionador de paquetes de


ubuntu

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927

2. Creamos el archivo tipo lista /etc/apt/sources.list.d/mongodb-org-3.2.list, usando


el comando apropiado para la versin de ubuntu que ests usando:

echo "deb http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.2 multiverse" |


sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

3. Actualizamos la base de datos local de paquetes de nuestro so

sudo apt-get update

4. Instalando los paquetes de mongodb

sudo apt-get install -y mongodb-org

5. Instalando una versin especfica de mongodb

Para instalar una versin especfica, debe especificar cada componente de forma individual
junto con su nmero de versin, como en el siguiente ejemplo:

sudo apt-get install -y mongodb-org=3.2.5 mongodb-org-server=3.2.5 mongodb-org-


shell=3.2.5
mongodb-org-mongos=3.2.5 mongodb-org-tools=3.2.5

6. Comprobando la instalacin de mongodb

mongo --version
Si nos indica un nmero de versin, por ejemplo MongoDB shell version: 3.2.5, quiere
decir que tenemos instalada correctamente la versin 3.2.5 de MongoDB.

Manipulacin
Manipulacin de datos: colecciones y documentos
MongoDB guarda la estructura de los datos en documentos tipo JSON con un esquema dinmico
llamado BSON, lo que implica que no existe un esquema predefinido. Los elementos de los datos
se denominan documentos y se guardan en colecciones.

Una coleccin puede tener un nmero indeterminado de documentos. Comparando con una base
de datos relacional, se puede decir que las colecciones son como tablas y los documentos son
registros en la tabla. La diferencia es que en una base de datos relacional cada registro en una
tabla tiene la misma cantidad de campos, mientras que en MongoDB cada documento en una
coleccin puede tener diferentes campos. En un documento, se pueden agregar, eliminar,
modificar o renombrar nuevos campos en cualquier momento,22 ya que no hay un esquema
predefinido. La estructura de un documento es simple y compuesta por pares llave/valor, parecido
a las matrices asociativas en un lenguaje de programacin, esto es debido a que MongoDB sigue el
formato de JSON. En MongoDB la clave es el nombre del campo y el valor es su contenido, los
cuales se separan mediante el uso de :, tal y como se puede ver en el siguiente ejemplo. Como
valor se pueden usar nmeros, cadenas o datos binarios como imgenes o cualquier otro.

En este ejemplo se puede ver que en el campo Address se contiene otro documento que tiene
los campos de Street y City.

{
"_id": ObjectId("4efa8d2b7d284dad101e4bc7"),
"Last Name": "PELLERIN",
"First Name": "Franck",
"Age": 29,
"Address": {
"Street": "1 chemin des Loges",
"City": "VERSAILLES"
}
}

Consultas
Algunas operaciones bsicas para saber cmo manipular los datos en MongoDB.

Creacin de registros - .insert()


Las operaciones son como funciones de Javascript, as que se llamara al objeto base de datos db y
se creara una nueva propiedad o lo que se asemejara al concepto de tabla con el nombre de
autores se le asociara su valor correspondiente (un objeto autor), es decir, una coleccin con un
documento asociado:

> db.autores.insert({
nombre : 'Jonathan',
apellido : 'Wiesel',
secciones : ['Como lo hago' , 'MongoDB']
});

Los documentos se definen como los objetos Javascript, u objetos JSON.

Inclusive es posible declarar el documento como un objeto, almacenarlo en una variable y


posteriormente insertarlo de la siguiente manera:

> var autorDelPost = {


nombre : 'Jonathan',
apellido : 'Wiesel',
secciones : ['Como lo hago' , 'MongoDB']
};

> db.autores.insert(autorDelPost);

Ahora si se ejecuta el comando show collections se puede ver que se encuentra una nueva
coleccin de autores:

autores
...

Agregando un par de autores ms:

> db.autores.insert({
nombre : 'Oscar',
apellido : 'Gonzalez',
secciones : ['iOS' , 'Objective C' , 'NodeJS' ],
socialAdmin : true
});
> db.autores.insert({
nombre : 'Alberto',
apellido : 'Grespan',
secciones : 'Git',
genero : "M"
});

Se aprecia que se insertaron nuevos documentos en la coleccin de autores que tienen otra
estructura, en MongoDB esto es completamente posible y es una de sus ventajas.

Bsqueda de registros - .find()


Hacer un query o una bsqueda de todos registros en la coleccin de autores.

> db.autores.find();

{ "_id" : ObjectId("5232344a2ad290346881464a"), "nombre" : "Jonathan",


"apellido" : "Wiesel", "secciones" : [ "Como lo hago", "Noticias" ] }
{ "_id" : ObjectId("523236022ad290346881464b"), "nombre" : "Oscar", "apellido" :
"Gonzalez", "secciones" : [ "iOS", "Objective C", "NodeJS" ], "socialAdmin" :
true }

{ "_id" : ObjectId("5232383a2ad290346881464c"), "nombre" : "Alberto", "apellido"


: "Grespan", "secciones" : "Git", "genero" : "M"}

Se denota que la bsqueda arroja los objetos resultantes, en este caso los documentos de los 3
autores que insertamos acompaados del identificador nico que crea MongoDB, este
campo _id se toma adems como ndice por defecto.
Si se desea se puede manualmente especificar el valor del campo _id cuando estas insertando los
registros con el comando db.coleccion.insert(); sin embargo ten en cuenta que debes asegurar que
este valor sea nico, de lo contrario los registros con dicho campo duplicado resultarn en error
por clave primaria duplicada.
Una bsqueda como la anterior sera similar en SQL a:
SELECT * FROM autores

Filtros
Si se quiere hacer la bsqueda pero filtrada por los algn parmetro. Para esto se debe pasar el
filtro deseado a la funcin find(), busquemos a los administradores sociales para probar:

> db.autores.find({ socialAdmin: true });

{ "_id" : ObjectId("523236022ad290346881464b"), "nombre" : "Oscar", "apellido" :


"Gonzalez", "secciones" : [ "iOS", "Objective C", "NodeJS" ], "socialAdmin" :
true }

En SQL sera similar a:

SELECT * FROM autores WHERE socialAdmin = true

Filtrar por varias condiciones, primero se probara con filtros donde TODOS se deben cumplir:

> db.autores.find({ genero: 'M', secciones: 'Git' });

{ "_id" : ObjectId("5232383a2ad290346881464c"), "nombre" : "Alberto", "apellido"


: "Grespan", "secciones" : "Git", "genero" : "M" }

Es importante destacar que si el documento resultante hubiese tenido en la


propiedad secciones un arreglo en lugar de una cadena de caracteres, si dicho arreglo tuviese el
valor Git tambin cumple la condicin.
En SQL sera similar a:
SELECT * FROM autores WHERE genero = 'M' AND secciones = 'Git'
Ahora un ejemplo un poco ms avanzado de filtros con condiciones donde se quiere que solo
ALGUNA de ellas se cumpla:

> db.autores.find({
$or: [
{socialAdmin : true},
{genero: 'M'}
]
});

{ "_id" : ObjectId("523236022ad290346881464b"), "nombre" : "Oscar", "apellido" :


"Gonzalez", "secciones" : [ "iOS", "Objective C", "NodeJS" ], "socialAdmin" :
true }

{ "_id" : ObjectId("5232383a2ad290346881464c"), "nombre" : "Alberto", "apellido"


: "Grespan", "secciones" : "Git", "genero" : "M" }

En este caso se esta filtrando por aquellos autores que son administradores sociales aquellos que
tengan el campo gnero con el carcter M.
En SQL sera similar a:
SELECT * FROM autores WHERE socialAdmin = true OR genero = 'M'

Limitar y Ordenar
Si se quiere limitar los resultados a un nmero mximo especificado de registros es tan fcil como
agregar .limit(#) al final del comando .find():

> db.autores.find().limit(1)

{ "_id" : ObjectId("5232344a2ad290346881464a"), "nombre" : "Jonathan",


"apellido" : "Wiesel", "secciones" : [ "Como lo hago", "MongoDB" ] }

En SQL sera similar a:


SELECT * FROM autores LIMIT 1
La misma modalidad sigue la funcionalidad de ordenar los registros por un campo en particular, el
cual servir de argumento a la funcin .sort():

> db.autores.find().sort({apellido : 1})

{ "_id" : ObjectId("523236022ad290346881464b"), "nombre" : "Oscar", "apellido" :


"Gonzalez", "secciones" : [ "iOS", "Objective C", "NodeJS" ], "socialAdmin" :
true }

{ "_id" : ObjectId("5232383a2ad290346881464c"), "nombre" : "Alberto", "apellido"


: "Grespan", "secciones" : "Git", "genero" : "M" }
{ "_id" : ObjectId("5232344a2ad290346881464a"), "nombre" : "Jonathan",
"apellido" : "Wiesel", "secciones" : [ "Como lo hago", "MongoDB" ] }

El nmero 1 que acompaa al argumento de ordenamiento es el tipo de orden, 1 para


descendiente y -1 para ascendente
En SQL sera similar a:
SELECT * FROM autores ORDER BY apellido DESC
Tambin se puede combinar ambas funciones tan solo llamando una despus de otra:

> db.autores.find().sort({apellido : 1}).limit(1)

{ "_id" : ObjectId("523236022ad290346881464b"), "nombre" : "Oscar", "apellido" :


"Gonzalez", "secciones" : [ "iOS", "Objective C", "NodeJS" ], "socialAdmin" :
true }

Otros filtros

Eliminacin de registros - .remove() y .drop()


Para esto existen 4 posibilidades:
Eliminar los documentos de una coleccin que cumplan alguna condicin.
Eliminar todos los documentos de una coleccin.
Eliminar la coleccin completa.
Probemos eliminando Jonathan de la coleccin de autores:

> db.autores.remove({ nombre: 'Jonathan' });

En SQL sera similar a:


DELETE FROM autores WHERE nombre = 'Jonathan'

Eliminando ahora a los dems autores:


> db.autores.remove();

En SQL sera similar a:


DELETE FROM autores

Ahora que la coleccin ha quedado vaca se eliminara toda:


> db.autores.drop();

En SQL sera similar a:


DROP TABLE autores