Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Bases de datos y colecciones

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.

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';
}

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()

Puede realizar cualquiera de las siguientes acciones para ver información sobre las colecciones de una base de datos:

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.

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 consultas

  • Schema::getTablesListing(): enumera el nombre de cada colección utilizando el creador de esquemas

  • Schema::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.

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();

Puede realizar cualquiera de las siguientes acciones para ver información sobre cada campo de una colección:

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.

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 documento

  • Schema::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().

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');

Para aprender a crear y eliminar colecciones, consulta la sección Realizar migraciones de Laravel en la guía de Schema Builder.

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');

Volver

Desarrollador de query

En esta página