El ABC con la librería mongodb/mongodb de PHP

2021-05-09 - Categorías: PHP

Aquí vengo a compartir un pequeño codekata o howto para comenzar a usar la última librería de PHP que se proporciona para el último driver de Mongodb a fecha de hoy. Mongodb es esta base de datos tan de moda. Tiene muy buen rendimiento, se suele usar cuando hay mucha cantidad de datos, escala horizontalmente muy bien, y un largo etcétera.

En unos posts anteriores estuve compartiendo sobre cómo arrancar en proyectos con Mongodb y PHP a pelo, sin librerías de Composer ni nada.

Hoy vengo a escribir sobre esta librería para PHP, con la que la mayoría de los usos de Mongodb están cubiertos. En el tiempo que la he probado, la mayoría de las cosas, si no todas, se puedan hacer con la librería mongodb/mongodb. Así que es muy recomendable para simplificar todo, aunque añada una capa de software a la aplicación.

Cómo instalar la librería en el proyecto

A día de hoy, con Composer podemos hacer lo siguiente:

composer require mongodb/mongodb

Se tendría que ver algo parecido a lo siguiente:

Instalando la última librería mongodb/mongodb del driver para PHP..

Podemos ver que aparte instala otras librerías necesarias.

Enlaces a documentación en PHP, diferencias de uso

Si no usamos la librería podríamos usar directamente mediante el driver oficial de PHP:

Primeros pasos con la librería

Es más sencillo ver el código primero. Por ejemplo para abrir en local una BD, e insertar documentos en una colección, bastaría con algo tal que así usando el insertOne:

<?php

require 'vendor/autoload.php';

$theCollection = (new MongoDB\Client)->dbName->collectionName;

for ($i=0; $i < 100; $i++) { 
    $theCollection->insertOne([
        'col1' => 'abc',
        'col2' => 'abc',
        'col3' => 'abc',
    ]);
}

Esto a su vez se podría simplificar para hacer sólo un ataque a la BD así con un insertMany:

<?php

require 'vendor/autoload.php';

$theCollection = (new MongoDB\Client())->dbName->collectionName;

$insertArray = [];
for ($i = 0; $i < 100; ++$i) {
    $insertArray[] = [
        'col1' => 'abc',
        'col2' => 'abc',
        'col3' => 'abc',
    ];
}

$theCollection->insertMany($insertArray);

Mucho más sencillo con la librería que sin ella. El resultado en la BD se vería como algo así:

Si abrimos el fichero que ayuda a manejar las colecciones vendor/mongodb/mongodb/src/Collection.php podemos listar las funciones públicas disponibles. Empezaremos a ver algunas funciones que se empiezan a parecer a las que se usan en otros proyectos, por ejemplo:

  • count() o countDocuments() para contar los documentos en una colección que coinciden.
  • find() o findOne() o findAndUpdate(), para encontrar documentos.
  • aggregate() para hacer tuberías de trabajo complejas.
  • bulkWrite() para lanzar varias actualizaciones de escritura.
  • deleteMany() o deleteOne() para los borrados de documentos.
  • distinct() para sacar valores únicos con ciertos filtros.
  • insertOne() o insertMany() para las inserciones.
  • updateMany() o updateOne() para las actualizaciones.
  • etcétera..

Tenemos también disponible mucha ayuda para la gestión de Mongodb. Por ejemplo en esta página explican sobre cómo construir la connection string con más configuraciones como la URL remota, usuario y contraseña, cifrado, etcétera:
https://docs.mongodb.com/manual/reference/connection-string/

Si por ejemplo quisiéramos elegir una BD remota podríamos hacer algo como lo siguiente:

$theCollection = (new MongoDB\Client('mongodb://usuario:password@servidor.com:27017'))
    ->dbName
    ->collectionName;

Y así sucesivamente..

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

© 2021 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.