Docs Menu
Docs Home
/ /

Bases de datos y colecciones

En esta guía, puede aprender a usar Laravel MongoDB para acceder y administrar 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.

Puede especificar un nombre de base de datos que una conexión utiliza en su 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 asigna el nombre de la base de datos en la propiedad database al nombre de una base de datos inexistente, Laravel seguirá estableciendo una conexión válida. Al insertar 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 configurando las propiedades dsn y database:

'default' => 'mongodb',
'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'dsn' => 'mongodb://localhost:27017/',
'database' => 'animals',
], ...
]

Cuando configura una conexión de base de datos predeterminada, la integración de Laravel utiliza esa conexión para las operaciones, pero puede especificar múltiples conexiones de base de datos en su archivo config/database.php.

El siguiente ejemplo muestra cómo especificar múltiples conexiones de base 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 PHP de MongoDB reutiliza la misma conexión al crear dos clientes con la misma cadena de conexión. Usar dos conexiones para dos bases de datos distintas no supone ninguna sobrecarga, por lo que no es necesario optimizar las conexiones.

Si su aplicación contiene múltiples conexiones de bases de datos y desea almacenar su modelo en una base de datos distinta de la predeterminada, anule 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 de modelo llamada Flower, Laravel aplica el modelo a la colección flowers en la base de datos.

Tip

Para aprender a especificar un nombre de colección diferente en su clase de modelo, consulte la Cambiar la sección Nombre de la colección de modelos de la guía de clases de modelos de 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 versión 7600 de Laravel Integration,4.8 el DB::collection() método está obsoleto. Como se muestra en el siguiente ejemplo, puede usar el DB::table() método 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 en 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.

Puede enumerar las colecciones en una base de datos llamando a los siguientes métodos en su aplicación:

  • DB::listCollections(): enumera información sobre cada colección mediante el generador de consultas

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

  • Schema::getTables(): enumera el nombre y el tamaño de cada colección utilizando el generador de esquemas

Nota

MongoDB es una base de datos con esquemas flexibles, por lo que los métodos de creación de esquemas anteriores 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 de generación de consultas 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.

Puede enumerar los campos de una colección llamando al método de generación de esquemas Schema::getColumns() en su aplicación.

También puede utilizar los siguientes métodos para devolver más información sobre los campos de colección:

  • Schema::hasColumn(string $<collection>, string $<field name>): comprueba si el campo especificado existe en al menos un documento

  • Schema::hasColumns(string $<collection>, string[] $<field names>): comprueba 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 MongoDB como el alias id en la lista de nombres de campo devuelta. Se puede pasar _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 de la colección flowers:

$fields = Schema::getColumns('flowers');

Para aprender cómo crear y eliminar colecciones, consulte la sección Realizar migraciones de Laravel en la guía del generador de esquemas.

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