MongoDB es una base de datos no relacional que guarda archivos con estructuras flexibles en formato JSON, lo cual nos permite almacenar información sobre entidades en una colección sin que necesariamente estas tengan una estructura definida. Es útil cuando por ejemplo tenemos varias fuentes de datos que queremos almacenar y categorizar pero es difícil y tedioso diseñar un esquema que cumpla con las diversas definiciones de las entidades. Como por ejemplo, si nuestra aplicación recopila datos de precios de hoteles de diferentes páginas web, cada página presenta diferentes datos pero todos son hoteles, y es imposible mantener una “tabla” para cada fuente.

MongoDB ha sido globalmente aceptado y tiene soporte en diversos lenguajes de programación. En este post vamos a aprender a conectarnos y realizar operaciones en una base de datos MongoDB desde nuestra aplicación PHP.

Ya que este es un conector que hace falta que esté disponible por defecto en varios frameworks, explicaré como instalar el driver y como realizar operaciones básicas sobre las colecciones.

Primero hay que clonar (o descargar) el repositorio del driver

$ git clone https://github.com/mongodb/mongo-php-driver.git
$ cd mongo-php-driver
$ git submodule sync && git submodule update --init
$ phpize
$ ./configure
$ make all -j 5
$ sudo make install

cuando esto está listo, en la última línea de salida notamos la ubicación del archivo mongo.so

Installing shared extensions:     /usr/lib/php/extensions/debug-non-zts-20151012/

Ahora corroboramos que la extensión se instalo en el directorio correcto

$ php -i | grep extension_dir
  extension_dir => /usr/lib/php/extensions/debug-non-zts-20151012 =>
                   /usr/lib/php/extensions/debug-non-zts-20151012

En este caso /usr/lib/php/extensions. Si la instalación se realizó en otro directorio lo que hay que hacer es mover manualmente el archivo mongo.so al directorio que muestra php -i 

Si ustedes, por desgracia, usan windows van a tener que descargar un archivo dll de la lista de drivers

https://s3.amazonaws.com/drivers.mongodb.org/php/index.html

Bajen el mas reciente. Me encantaría decirles donde ponerlo, pero llevo 14 años de no usar windows 🙂

Bien ahora, dependiendo de su configuración podrían necesitar agregar esta línea a su archivo php.ini:

extension = php_mongo.dll

Y ahora por fin, manos al código!

Para conectarnos a mongo desde php simplemente necesitamos hacer algo como esto:

<?php
   // Crear una nueva instancia del conector
   $mongo = new MongoClient();
	
   echo "Conexion exitosa"; //porque no hubo excepciones

   // seleccionamos una base de datos
   $db = $mongo->base_de_datos;
	
   echo "base_de_datos seleccionada"; //porque no hubo excepciones
?>

Si la instalación fue creada exitosamente, deberíamos ver de salida:

Conexion exitosa
base_de_datos seleccionada

Crear una coleccion

Ahora para crear una colección necesitamos el siguiente código:

<?php
   // conectarse
   $mongo = new MongoClient();

   //seleccionar
   $db = $mongo->db; 

   $coleccion = $db->createCollection("mi_coleccion");

   echo "Coleccion Creada Exitosamente";
?>

Insertar Un Documento

Para insertar un documento nuevo podemos usar algo parecido a esto:

<?php
   $mongo = new MongoClient();
   $db = $mongo->db;
   $coleccion = $db->mi_coleccion;
	
   $documento = array( 
      "titulo" => "MongoDB", 
      "descripcion" => "base de datos", 
      "registros" => 100
   );
	
   $coleccion->insert($documento);

   echo "Documento insertado";
?>

Buscar Documentos

Para buscar documentos hacemos uso de la función find()

<?php
   $mongo = new MongoClient();
   $db = $mongo->mydb;
   $coleccion = $db->mi_coleccion;

   $cursor = $coleccion->find();
	
   foreach ($cursor as $documento) {
      echo $documento["titulo"] . "\n";
   }
?>

Actualizar Un Documento

Ahora para actualizar usamos el comando update()

<?php
   $mongo = new MongoClient();
   $db = $mongo->db;
   $coleccion = $db->mi_coleccion;

   $coleccion->update(array("titulo"=>"MongoDB"), 
      array('$set'=>array("titulo"=>"Tutorial MongoDB")));
	
   // Ahora verificamos con find()
   $cursor = $coleccion->find();
		
   foreach ($cursor as $documento) {
      echo $documento["titulo"] . "\n";
   }
?>

Borrar Un Documento

Ahora para borrar un documento usamos la función remove()

<?php
   $mongo = new MongoClient();
   $db = $mongo->db;
   $coleccion = $db->mi_coleccion;

   $coleccion->remove(array("titulo"=>"Tutorial MongoDB"), false);

   // Ahora verificamos
   $cursor = $coleccion->find();
	
   foreach ($cursor as $documento) {
      echo $documento["titulo"] . "\n";
   }
?>

En este último no deberíamos ver nada como salida (ya que solo teníamos un registro)

Y así es como de manera fácil podemos ponernos a trabajar con mongoDB en nuestro proyecto PHP.

Categorized in:

Tagged in:

, ,