MongoDB - Conexión

En este tutorial discutiremos las diferentes formas de conectarse a MongoDB.

Iniciar el servicio de MongoDB

En los tutoriales anteriores, ya hemos discutidocómo iniciar el servicio de MongoDB, solo necesitas ejecutar en el directorio bin del directorio de instalación de MongoDBmongodby listo.

Después de realizar la operación de inicio, mongodb no generará ninguna información después de mostrar alguna información necesaria, y luego esperará a que se establezca la conexión. Cuando se establece la conexión, comenzará a imprimir información de registro.

Puedes usarMongoDB shellpara conectarte al servidor MongoDB. También puedes usar PHP para conectarte a MongoDB. En este tutorial usaremos el shell de MongoDB para conectarnos al servicio de MongoDB. En los siguientes capítulos presentaremos cómo conectarse al servicio de MongoDB mediante PHP, Python y Node.js.

Sintaxis de conexión URI estándar:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
  • mongodb://: protocolo, indica que se utiliza MongoDB.
  • [username:password@]: (opcional) información de autenticación, incluye nombre de usuario y contraseña.
  • host1[:port1][,...hostN[:portN]]: dirección y puerto del servidor, puede ser la dirección y puerto de uno o más servidores MongoDB.
  • /[defaultauthdb]: (opcional) base de datos de autenticación predeterminada.
  • [?options]: (opcional) opciones de conexión.

El formato de conexión estándar incluye varias opciones (options), como se muestra a continuación:

  • authSource: especifica la base de datos de autenticación.
  • replicaSet: especifica el nombre del conjunto de réplicas.
  • ssl: habilita la conexión SSL (true o false).
  • readPreference: especifica la preferencia de lectura, comoprimary, primaryPreferred, secondary, secondaryPreferred, nearest。
  • connectTimeoutMS: especifica el tiempo de espera de conexión (milisegundos).
  • socketTimeoutMS: especifica el tiempo de espera del socket (milisegundos).

Conectarse a la instancia local de MongoDB (puerto predeterminado 27017):

mongodb://localhost

Conectarse a la instancia local de MongoDB, especificando la base de datos:

mongodb://localhost/mydatabase

Conectarse a la instancia local de MongoDB usando nombre de usuario y contraseña:

mongodb://username:password@localhost/mydatabase

Conectarse a una instancia remota de MongoDB:

mongodb://remotehost:27017

Conectarse a un conjunto de réplicas (Replica Set):

mongodb://host1:27017,host2:27017,host3:27017/mydatabase?replicaSet=myReplicaSet

Conectarse a MongoDB usando SSL:

mongodb://username:password@localhost:27017/mydatabase?ssl=true

Conectarse usando múltiples opciones:

mongodb://username:password@localhost:27017/mydatabase?authSource=admin&ssl=true

Python (PyMongo)

Ejemplo

from pymongo import MongoClient

client = MongoClient('mongodb://user:password@localhost:27017/mydatabase?authSource=admin')
db = client['mydatabase']

Node.js (Mongoose)

Ejemplo

const mongoose = require('mongoose');

mongoose.connect('mongodb://user:password@localhost:27017/mydatabase?authSource=admin', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log('Connected to MongoDB');
});

PHP (Mongoose)

Ejemplo

<?php
require 'vendor/autoload.php'; // Importar el archivo de carga automática de Composer

$client = new MongoDB\Client("mongodb://localhost:27017"); // Conectarse a la instancia local de MongoDB
$database = $client->selectDatabase('mydatabase'); // Seleccionar la base de datos
$collection = $database->selectCollection('mycollection'); // Seleccionar la colección

// Insertar documento
$result = $collection->insertOne(['name' => 'Alice', 'age' => 30]);
echo "Inserted with Object ID '{$result->getInsertedId()}'";

// Consultar documento
$document = $collection->findOne(['name' => 'Alice']);
echo "Found document: " . json_encode($document);
?>

Java

Ejemplo

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;

public class MongoDBConnection {
    public static void main(String[] args) {
        String uri = "mongodb://user:password@localhost:27017/mydatabase?authSource=admin";
        try (MongoClient mongoClient = MongoClients.create(uri)) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            System.out.println("Connected to MongoDB");
        }
    }
}

Ejemplo

Conectarse al servicio de MongoDB usando el puerto predeterminado.

mongodb://localhost

Conectarse al servicio de MongoDB a través del shell:

./mongosh
Current Mongosh Log ID:    66792d6b87657ebec9ed70f1
Connecting to:        mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.9
Using MongoDB:        7.0.11
Using Mongosh:        2.2.9

En este momento, regresas a revisar la ventana que ejecuta./mongodel comando, podrás ver desde dónde se conecta al servidor de MongoDB, y verás la siguiente información:

……省略信息……
2015-09-25T17:22:27.336+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2015-09-25T17:22:27.336+0800 I CONTROL  [initandlisten] options: { storage: { dbPath: "/data/db" } }
2015-09-25T17:22:27.350+0800 I NETWORK  [initandlisten] waiting for connections on port 27017
2015-09-25T17:22:36.012+0800 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:37310 #1 (1 connection now open)  # 该行表明一个来自本机的连接

……省略信息……

Formato del comando de conexión MongoDB

Para conectarse al servidor MongoDB con nombre de usuario y contraseña, debes usar 'username:password@hostname/dbname' formato, 'username' es el nombre de usuario, 'password' es la contraseña.

Conectarse e iniciar sesión en la base de datos predeterminada usando nombre de usuario y contraseña:

$ ./mongosh
MongoDB shell version: 4.0.9
connecting to: test

Con el usuario admin y la contraseña 123456, conéctese al servicio local de MongoDB. El resultado de salida es el siguiente:

> mongodb://admin:123456@localhost/
... 

Conectarse e iniciar sesión en una base de datos específica usando nombre de usuario y contraseña, el formato es el siguiente:

mongodb://admin:123456@localhost/test

Más ejemplos de conexión

Conectarse al servidor de base de datos local, con el puerto predeterminado.

mongodb://localhost

Iniciar sesión en la base de datos admin de localhost con el usuario fred y la contraseña foobar.

mongodb://fred:foobar@localhost

Iniciar sesión en la base de datos baz de localhost con el usuario fred y la contraseña foobar.

mongodb://fred:foobar@localhost/baz

Conectarse a un par de réplicas (replica pair), donde el servidor 1 es example1.com y el servidor 2 es example2.

mongodb://example1.com:27017,example2.com:27017

Conectarse a un conjunto de réplicas (replica set) con tres servidores (puertos 27017, 27018 y 27019):

mongodb://localhost,localhost:27018,localhost:27019

Conectarse a un conjunto de réplicas de tres servidores, las operaciones de escritura se aplican al servidor principal y las consultas se distribuyen a los servidores secundarios.

mongodb://host1,host2,host3/?slaveOk=true

Conectarse directamente al primer servidor, ya sea parte de un conjunto de réplicas, servidor principal o servidor secundario.

mongodb://host1,host2,host3/?connect=direct;slaveOk=true

Cuando tu servidor de conexión tiene prioridad y además necesitas listar todos los servidores, puedes usar el método de conexión anterior.

Conectarse a localhost en modo seguro:

mongodb://localhost/?safe=true

Conectarse al conjunto de réplicas en modo seguro, esperando que al menos dos servidores de réplica confirmen la escritura correctamente, con un tiempo de espera de 2 segundos.

mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000
Otras extensiones