Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
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. Un 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 datos como documentos que contienen pares de campo y valor. En la Integración de Laravel, puedes acceder a documentos a través de modelos 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 en 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. Después de que especifiques una conexión a la base de datos, puedes realizar operaciones a nivel de base de datos y acceder a las colecciones que contiene la base de datos.

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 sobrescribir 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 creas 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 formado como la forma plural en snake case del nombre de tu 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 debido a la legibilidad y mantenibilidad del código. El siguiente ejemplo especifica una operación de búsqueda utilizando la clase Flower, de modo que Laravel recupera 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:

Puedes listar las colecciones en una base de datos ejecutando el siguiente comando en tu shell desde el directorio raíz de tu 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();

Puedes 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 muestra los campos de la colección y sus correspondientes tipos de datos bajo el encabezado Column. Para obtener más información sobre el comando db:table, consulta Laravel: Nuevos comandos de BD 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