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.