Cargando



Operaciones CRUD para MongoDB en PHP

Vamos a ahondar en este tutorial las operaciones CRUD que podemos desarrollar contra una Base de Datos en MongoDB desde una aplicación hecha con PHP.


ene 21 2015 06:15
Profesional
ene 21 2015 11:28
Las aplicaciones web generalmente se enfocan en cuatro operaciones básicas que necesitan realizar contra su sistema de persistencia o Bases de Datos, estas operaciones se consideran como claves a la hora de aprender a desarrollar para este entorno, nos referimos a Crear, Leer, Actualizar y Borrar también conocidas como CRUD por sus siglas en inglés.

MongoDB gracias a su driver para PHP, nos permite realizar estas cuatro operaciones de manera muy sencilla, sin embargo al ser un manejador de Bases de Datos no relacional, no podemos caer en el error de tratar todas las cosas como si estuviésemos utilizando un sistema relacional como MySQL o PostgreSQL.

Requisitos
Para seguir este tutorial, debemos tener instalada una versión de MongoDB en nuestro ambiente de pruebas, además de haber descargado y activado el driver correspondiente para PHP, para más información de cómo cumplir estos requisitos puedes darle un vistazo al siguiente tutorial.


MongoDB Optimizado para CRUD


MongoDB fue creado para ser muy eficiente en las transacciones y operaciones, de esta forma se pueden resolver los problemas de la vida real sin tener que perder rendimiento. Un CRUD no requiere en sí de mucho poder de procesamiento, pero cuando ocurren miles de peticiones hacia nuestra Base de Datos en poco tiempo es donde podremos ver como MongoDB nos ayuda a mantener el rendimiento.

Las colecciones y los documentos son entidades muy poderosas, ya que al carecer de una estructura definida podemos almacenar los datos que deseemos manteniendo una imagen limpia y ordenada, además que podemos acceder en consultas simples a datos que en modelos relacionales nos pudieran tomar consultas intermedias a muchas tablas.

Crear o Seleccionar una colección


Las Bases de Datos en MongoDB son conocidas como colecciones, por lo tanto no podemos tratarlas como Bases de Datos tradicionales, si no como un conjunto de documentos que se agrupan bajo un diferenciador con un nombre.

Creando colección
Para crear una colección no necesitamos algún comando especial, simplemente con el mismo comando que la seleccionamos si esta no existe, MongoDB se encargará de crear una nueva con el nombre que hayamos especificado.


Esta sencillez nos facilita el trabajo, además que reduce la cantidad de código que debemos colocar en nuestras aplicaciones. Veamos en la siguiente imagen un código de ejemplo con el cual podemos seleccionar una colección en MongoDB:

crud-php-momgodb.jpg


Aquí vemos como primero creamos el objeto de la clase Mongo(), esta es incluida al instalar el driver correspondiente, luego simplemente al utilizar el objeto y escribir un nombre de Base de Datos está es seleccionada o creada. En este punto debemos tener cuidado, ya que MongoDB no va a retornar un error si la Base de Datos no existe, simplemente creará una nueva, por lo que hay que hacer una verificación doble de los nombres que escribimos.

Finalmente podemos crear una colección dentro de la Base de Datos llamada direcciones, ya con ello tendremos la base sobre la cual realizar nuestras operaciones CRUD.

Crear un documento en una colección


Para poder hacer las demás operaciones del CRUD primero debemos tener datos, es por ello que lo primero que aprenderemos es a crear documentos o hacer inserciones de registros, como mejor se adapte a nuestro lenguaje técnico.

Gracias al driver de MongoDB, simplemente debemos crear un arreglo o array, con la estructura y los datos necesarios para nuestro nuevo registro y luego llamar al método insert() del método de conexión. No tenemos necesidad de tener una estructura definida o seguir un patrón para la misma, si un documento tiene un campo y otro no, no se afecta el proceso.

Veamos en la siguiente imagen el código fuente que explica el proceso antes mencionado:

crud-php-momgodb-2.jpg


Existe una alternativa al método insert() y es el método save(), la diferencia es que save() si se le especifica un identificador único y este existe el registro existente será actualizado con los nuevos datos.

En la comunidad de desarrolladores sugieren trabajar más con save() que con insert() para generar código que pueda reutilizarse, sin embargo la decisión está en manos de cada quien.

Asincronía y sincronía


Por defecto el método de inserción en MongoDB es asíncrono, esto significa que mientras el motor de Base de Datos está insertando o actualizando el registro PHP sigue su ejecución sin bloquearse. El resultado de este comportamiento es que la aplicación va más rápido, aunque no sea que el motor de Base de Datos lo haga.

Como no siempre nos va a ser útil este comportamiento, podemos forzar a que se comporte de forma sincrónica al pasar el parámetro safe al momento de ejecutar la operación, esto hará que PHP espere por la respuesta de MongoDB antes de continuar con la ejecución de sus instrucciones. La estructura del parámetro safe es el siguiente:

$coleccion->insert($direccion, array('safe' => true));

Las llaves primarias


Por defecto y a menos que especifiquemos lo contrario, MongoDB genera automáticamente las llaves primarias de los documentos bajo el nombre _id, al momento de hacer un insert() de forma sincrónica, se establece y se coloca la llave en el array que acabamos de insertar.

Por lo que si queremos saber cuál es el identificador único solo debemos consultar esta propiedad del array, si seguimos el ejemplo anterior, solo bastaría con hacer lo siguiente:

$id = $coleccion['_id'];

Leyendo un documento


Pasamos ahora a la segunda operación, que es leer la información que tenemos en nuestros documentos o Bases de Datos. Aquí podemos hacer consultas por la llave primaria directamente o por cualquier otra combinación de propiedades de nuestro documento.

Para hacer la búsqueda simplemente utilizamos el método findone() y a este le vamos a pasar un array con todos los elementos que vamos a filtrar. Veamos en la siguiente imagen una consulta utilizando llave primaría y otra utilizando otras propiedades del documento:

crud-php-momgodb-3.jpg


Si notamos acá, para buscar por llave primaria lo primero que hacemos es crear un objeto del tipo MongoId y le pasmaos el valor de la misma, esto es clave para que todo funcione correctamente. En cambio al consultar por propiedades solo basta con colocar el valor dentro del array sin necesidad de crear objetos.

Por defecto MongoDB va a retornar el documento completo una vez que haya encontrado una coincidencia, por lo que si no queremos más que uno o pocos datos del mismo, tenemos que especificarlo en un segundo parámetro que es un array de las propiedades o campos que deseamos, veamos en el siguiente código como puede hacerse esto:

$resultado = $coleccion->findone( array( '_id' => $id ), array('nombre', 'apellido') );

Al colocar el código anterior, la variable resultado va a tener un array que solo contiene las propiedades nombre y apellido del documento que haga coincidencia con el criterio de búsqueda.

Actualizar un documento


Pasamos ahora a la tercera operación, esta es actualizar un documento ya creado dentro de nuestra colección, aquí hay que tener cuidado, ya que si no colocamos la forma correcta podemos terminar sobrescribiendo el documento original en vez de actualizar o agregar una propiedad.

Para evitar confusiones se recomienda el uso de $set que es un operador que le indica a MongoDB que si el parámetro existe va a ser actualizado con el valor enviado, y de no existir se creará. Esto nos permite evitar errores en nuestra aplicación y mejor aún nos permite dotar a nuestra aplicación de una funcionalidad deseada. Veamos cómo funciona esto:


Nos hemos dado cuenta entonces como podemos cambiar en este caso el valor de la propiedad ciudad, sin embargo si en el registro esta no existiera, se generaría sin alterar lo que ya existe ahí.

Hay algo especial que podemos hacer en MongoDB y que no se puede hacer en un motor relacional, y es la posibilidad de añadir arrays dentro de nuestros documentos, con ello podremos añadir listados de valores dentro de una propiedad de forma que podríamos generar documentos cada vez más complejos y completos para nuestras necesidades, todo ello sin tener que afectar la estructura general de otros documentos que conviven dentro de la misma colección.

Borrar un documento


Esta es la última operación, borrar es muy sencillo, casi tanto o más que añadir o actualizar, simplemente buscamos un criterio o filtro de borrado, lo cargamos en un array y ejecutamos el método remove().

Lo único que debemos tener en cuenta es que MongoDB borrará todos los documentos que hagan coincidencia con dicho criterio, es por ello que si queremos borrar solo uno debemos utilizar la propiedad justOne y colocarla en True. Veamos a continuación el código para eliminar un documento:

crud-php-momgodb-5.jpg


Con esto finalizamos este tutorial, hemos visto de forma básica pero funcional como podemos incluir un CRUD sobre una estructura no relacional como MongoDB desde PHP. Si logramos dominar esto estaremos realizando aplicaciones de alto rendimiento y muy flexibles que nos ayudarán a impresionar a nuestros usuarios.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X