Overview
En esta guía, puedes aprender cómo usar Laravel MongoDB para acceder y gestionar bases de datos y colecciones de MongoDB.
MongoDB organiza los datos en una estructura jerárquica. Una implementación de MongoDB contiene una o más bases de datos, y cada base de datos contiene una o más colecciones. En cada colección,MongoDB almacena los datos como documentos que contienen pares de campo y valor. En la integración de Laravel, se puede acceder a los documentos mediante modelos de Eloquent.
Para obtener más información sobre el formato de datos del documento, consulte Documentos en el manual del servidor.
Especificar la base de datos en una configuración de conexión
Puedes especificar un nombre de base de datos que una conexión utiliza en tu aplicación config/database.php Archivo. La propiedad connections de este archivo almacena toda la información de conexión a la base de datos, como la cadena de conexión, el nombre de la base de datos y, opcionalmente, los detalles de autenticación. Tras especificar una conexión a la base de datos, puede realizar operaciones a nivel de base de datos y acceder a las colecciones que contiene.
Si estableces el nombre de la base de datos en la propiedad database al nombre de una base de datos inexistente, Laravel sigue estableciendo una conexión válida. Cuando introduces datos en una colección de la base de datos, el servidor los crea automáticamente.
El siguiente ejemplo muestra cómo establecer una conexión de base de datos predeterminada y crear una conexión de base de datos a la base de datos animals en el archivo config/database.php estableciendo las propiedades dsn y database:
'default' => 'mongodb', 'connections' => [ 'mongodb' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'animals', ], ... ]
Cuando estableces una conexión predeterminada a la base de datos, la Integración Laravel utiliza esa conexión para operaciones, pero puedes especificar múltiples conexiones a la base de datos en tu archivo config/database.php.
El siguiente ejemplo muestra cómo especificar múltiples conexiones de bases de datos (mongodb y mongodb_alt) para acceder a las bases de datos animals y plants:
'connections' => [ 'mongodb' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'animals', ], 'mongodb_alt' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'plants', ] ], ...
Nota
El controlador MongoDB PHP reutiliza la misma conexión cuando creas dos clientes con la misma cadena de conexión. No existe gastos en general en utilizar dos conexiones para dos bases de datos distintas, por lo que no es necesario optimizar las conexiones.
Si su aplicación contiene múltiples conexiones a bases de datos y desea almacenar su modelo en una base de datos distinta de la predeterminada, sobrescriba la propiedad $connection en su clase Model.
El siguiente ejemplo muestra cómo anular la propiedad $connection en la clase de modelo Flower para usar la conexión mongodb_alt. Esto indica a la integración de Laravel que almacene el modelo en la colección flowers de la base de datos plants, en lugar de en la base de datos predeterminada:
class Flower extends Model { protected $connection = 'mongodb_alt'; }
Acceder a una colección
Cuando crea una clase de modelo que extiende MongoDB\Laravel\Eloquent\Model, la integración de Laravel almacena los datos del modelo en una colección con un nombre formateado como la forma plural (casi sin sentido) del nombre de su clase de modelo.
Por ejemplo, si crea una clase modelo llamada Flower, Laravel aplicará el modelo a la colección flowers en la base de datos.
Tip
Para aprender cómo especificar un nombre de colección diferente en tu clase de modelo, consulta la sección Cambia el nombre de la colección Modelo de la guía de Clases de modelos Eloquent.
Generalmente recomendamos usar el ORM Eloquent para acceder a una colección, lo que facilita la legibilidad y el mantenimiento del código. El siguiente ejemplo especifica una operación de búsqueda mediante la clase Flower, de modo que Laravel recupera los resultados de la colección flowers:
Flower::where('name', 'Water Lily')->get()
Nota
A partir de la integración de Laravel v4.8, el método DB::collection() está descontinuado. Como se muestra en el siguiente ejemplo, puedes utilizar el método DB::table() para acceder a una colección de MongoDB.
Si no puedes realizar tu operación utilizando un modelo Eloquent, puedes acceder al generador de query llamando al método table() en la fachada DB. El siguiente ejemplo muestra la misma consulta que el ejemplo anterior, pero la consulta se construye utilizando el método DB::table():
DB::connection('mongodb') ->table('flowers') ->where('name', 'Water Lily') ->get()
Listar colecciones
Puede realizar cualquiera de las siguientes acciones para ver información sobre las colecciones de una base de datos:
Ejecutar una instrucción Shell
Puede enumerar las colecciones en una base de datos ejecutando el siguiente comando en su shell desde el directorio raíz de su proyecto:
php artisan db:show
Este comando proporciona información sobre la base de datos configurada y lista sus colecciones bajo el encabezado Table. Para obtener más información sobre el comando db:show, consulta Laravel: Nuevo comandos de BD en el blog oficial de Laravel.
Llama a métodos de base de datos o de esquema
Puedes listar las colecciones en una base de datos llamando a los siguientes métodos en tu aplicación:
DB::listCollections(): lista información sobre cada colección utilizando el generador de consultasSchema::getTablesListing(): enumera el nombre de cada colección utilizando el creador de esquemasSchema::getTables(): lista el nombre y tamaño de cada colección mediante el generador de esquemas
Nota
MongoDB es una base de datos con un esquema flexible, por lo tanto, los métodos anteriores del generador de esquemas consultan los datos de la base de datos en lugar del esquema.
Ejemplo
El siguiente ejemplo accede a la base de datos de la conexión y luego llama al método constructor de query listCollections() para recuperar información sobre las colecciones en la base de datos:
$collections = DB::connection('mongodb')->getDatabase()->listCollections();
Listar campos de colección
Puede realizar cualquiera de las siguientes acciones para ver información sobre cada campo de una colección:
Ejecutar una instrucción Shell
Puedes ver una lista de campos en una colección ejecutando el siguiente comando en tu shell desde el directorio raíz de tu proyecto:
php artisan db:table <collection name>
Este comando genera cada campo de colección y su tipo de dato correspondiente bajo el Column encabezado. Para más información sobre el db:table comando, consulta Laravel: Nuevos comandos de base de datos en el blog oficial de Laravel.
Llamar a métodos de esquema
Puedes listar los campos en una colección llamando al método constructor de esquemas Schema::getColumns() en tu aplicación.
También puede usar los siguientes métodos para devolver más información sobre los campos de la colección:
Schema::hasColumn(string $<collection>, string $<field name>)Verifica si el campo especificado existe en al menos un documentoSchema::hasColumns(string $<collection>, string[] $<field names>): verifica si cada campo especificado existe en al menos un documento
MongoDB es una base de datos flexible en cuanto a esquemas, por lo que los métodos anteriores queryan los datos de la colección en vez del esquema de la base de datos. Si la colección especificada no existe o está vacía, estos métodos devuelven un valor de false.
Nota
id Alias
A partir de Laravel MongoDB v5.1, el método getColumns() representa el nombre del campo _id en una colección de MongoDB como el alias id en la lista devuelta de nombres de campos. Puedes pasar ya sea _id o id a los métodos hasColumn() y hasColumns().
Ejemplo
El siguiente ejemplo pasa un nombre de colección al método Schema::getColumns() para recuperar cada campo en la colección flowers:
$fields = Schema::getColumns('flowers');
Crear y eliminar colecciones
Para aprender a crear y eliminar colecciones, consulta la sección Realizar migraciones de Laravel en la guía de Schema Builder.
Descartar una base de datos
Para borrar una base de datos de tu implementación de MongoDB, llama al método getMongoClient() en la fachada DB para acceder a tu cliente. Luego, llama al método dropDatabase() de la librería PHP de MongoDB y pasa el nombre de la base de datos a borrar como argumento.
El siguiente ejemplo elimina una base de datos llamada test_database:
$client = DB::getMongoClient(); $client->dropDatabase('test_database');