sábado, 20 de julio de 2013

Como usar MongoDB con Perl

Tutorial Perl MongoDB scripting


Como prometí en un comentario,aquí un tutorial de como usar MongoDB desde un script en Perl,el cual luego podemos usar en GUI,Diseño Web,etc en otra ocasión lo haré en python pero de momento en Perl.

Primero que nada se supone que ya debemos tener instalado MongoDB,si no es así consulta lo documentación o busca si ya esta en tu distribución de Linux(Si usas Linux):

Por ejemplo en Ubuntu/Debian:

aptitude search mongo

Gentoo:

emerge –search mongo
Y luego lo instalamos :

sudo apt-get install mongodb

etc


Bueno,también necesitamos el modulo MongoDB de Perl,así que lo instalamos desde CPAN:

En terminal:

sudo cpan install MongoDB


SI usan Windows,pueden instalar desde la GUI que traen las versiones de Perl,dependiendo cual usen,con el nombre MongoDB.

Ahora vamos a crear el script para Shell:

Con su editor favorito:

vim mongo.pl

Y metemos:

 #!/usr/bin/env perl # <-Hashbang  
   
 use MongoDB; # <- Modulo  
 use MongoDB::Database; <- Submodulo  
 use strict;  
   
 use warnings; # <- Para desarrollo  
   
 # Definimos algunas variable para conectarnos a la Base de Datos  
 # Como el nombre de la base de datos   
 # El puerto,etc  
   
 my $database = "test";  
   
 my $puerto = 27017;  
   
 my $host = "localhost";  
   
 # Iniciamos la conexion  
   
 $host = sprintf("%s:%s",$host,$puerto);  
   
 my $cliente = MongoDB::MongoClient->new("host" => $host );  
   
 # Nos conectamos a la base de datos  
   
 my $base_datos = $cliente->get_database( $database );  

Esa es la plantilla basica de conexion,ahora vamos a ver algunas cosas que se pueden hacer:

Listar las collections:

Para ello usamos un array

 my @collections = $base_datos->collection_names;  
   
 for (my $i = 0; $i < scalar(@collections); $i++)  
 {  
   print $collections[$i],"\n";  
 }  

Definir una collection:

 my $collections = {};  
   
 my @collections = $base_datos->collection_names;  
   
 for (my $i = 0; $i < scalar(@collections); $i++)  
 {  
   print $i,":",$collections[$i],"\n";  
 }  
   
 my $coll = {};  
   
 print "Elige una base de datos : ";  
   
 my $R_c = <STDIN>;  
   
 chop($R_c);  
   
 $coll->{$collections[$R_c]} = $base_datos->get_collection($collections[$R_c]);  



Eso se hace mas simple pero yo use una referencia para acceder a barias collections,ahora ya estamos en una collection adentro de la referencia:

$coll;

También podemos hacer algo mas simple manualmente como;

 my $coll = $base_datos->get_collection('collection');

Buscar un objeto:

Para buscar un objeto solo basta con asignar una variable al objeto,ya que solo es uno:

Pero aunque nos devuelva un solo valor covertira la variable a un hashref,ya que al usar formato estilo JSON debemos iterar sobre un valor de tipo diccionario,si usan,usaban MySQL no hay problema se hace lo mismo para recorrer los valores:

 my $object = $coll->{$collections[$R_c]}->find_one();  
   
 foreach my $keys(keys $object)  
  # Con un foreach basta  
 {  
   print $object->{$keys},"\n";  
 }  

Buscar todos los datos de una collection:

Si no queremos buscar uno y queremos ver todos los datos podemos usar un bucle foreach anidado en un while desde la funcion find del modulo MongoDB:

 my $all = $coll->{$collections[$R_c]}->find;  
   
 while (my $doc = $all->next) {  
   foreach my $keys (keys $doc)  
   {  
     print $doc->{$keys}," ";  
   }  
   print "\n";  
 }  

Insertar datos:

Para insertar datos debemos estar en la collection,así que el código iría debajo del anterior o en vez:

 $coll->{$collections[$R_c]}->insert({  
     "_id" => 2,  
     "value" => "Hola Mundo desde Perl y MongoDB"  
   });  


Les dejo un script con todo lo que hicimos:

Enlace

Bueno y eso es lo básico,conexión,consulta y insertar,para mas información visiten el tutorial de CPAN:

http://search.cpan.org/~friedo/MongoDB-0.701.4/lib/MongoDB/Tutorial.pod

2 comentarios:

  1. Gracias, un buen y útil resumen para los que estamos empezando con MongoDB vía Perl, facilita mucho el trabajo y acorta tiempos de aprendizaje. Saludos.

    ResponderBorrar
  2. Que bueno que te haya sido útil :D,ya casi termino el de python por si también te interesa.

    Saludos :D.

    ResponderBorrar

Los comentarios serán revisados antes de ser publicados.