MongoDB - Verbinden

In diesem Tutorial besprechen wir die verschiedenen Möglichkeiten, eine Verbindung zu MongoDB herzustellen.

MongoDB-Dienst starten

In den vorherigen Tutorials haben wir besprochen,wie man den MongoDB-Dienst startet, Sie müssen nur den folgenden Befehl im bin-Verzeichnis des MongoDB-Installationsverzeichnisses ausführenmongodbund das war's.

Nach dem Start gibt MongoDB einige notwendige Informationen aus, danach erfolgt keine Ausgabe mehr; anschließend wartet es darauf, dass Verbindungen hergestellt werden. Sobald eine Verbindung hergestellt ist, beginnt es mit der Ausgabe von Log-Informationen.

Sie könnenMongoDB-Shellverwenden, um eine Verbindung zum MongoDB-Server herzustellen. Sie können auch PHP verwenden, um eine Verbindung zu MongoDB herzustellen. In diesem Tutorial verwenden wir die MongoDB-Shell, um eine Verbindung zum MongoDB-Dienst herzustellen, und in späteren Kapiteln führen wir ein, wie man über PHP, Python und Node.js eine Verbindung zu MongoDB-Diensten herstellt.

Standard-URI-Verbindungssyntax:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
  • mongodb://: Protokoll-Header, gibt die Verwendung von MongoDB an.
  • [username:password@]: (optional) Authentifizierungsinformationen, einschließlich Benutzername und Passwort.
  • host1[:port1][,...hostN[:portN]]: Serveradresse und Port; dabei kann es sich um die Adresse und den Port eines oder mehrerer MongoDB-Server handeln.
  • /[defaultauthdb]: (optional) Standard-Authentifizierungsdatenbank.
  • [?options]: (optional) Verbindungsoptionen.

Das Standardverbindungsformat enthält mehrere Optionen, wie unten gezeigt:

  • authSource: gibt die Authentifizierungsdatenbank an.
  • replicaSet: gibt den Namen des Replica-Sets an.
  • ssl: aktiviert SSL-Verbindung (true oder false).
  • readPreference: gibt die Lesepräferenz an, wie z. B.primary, primaryPreferred, secondary, secondaryPreferred, nearest。
  • connectTimeoutMS: gibt den Verbindungs-Timeout (Millisekunden) an.
  • socketTimeoutMS: gibt den Socket-Timeout (Millisekunden) an.

Mit einer lokalen MongoDB-Instanz verbinden (Standardport 27017):

mongodb://localhost

Mit einer lokalen MongoDB-Instanz verbinden:

mongodb://localhost/mydatabase

Mit einer lokalen MongoDB-Instanz über Benutzername und Passwort verbinden:

mongodb://username:password@localhost/mydatabase

Mit einer entfernten MongoDB-Instanz verbinden:

mongodb://remotehost:27017

Verbindung zu einem Replica-Set herstellen:

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

Verbindung zu MongoDB über SSL herstellen:

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

Verbindung mit mehreren Optionen herstellen:

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

Python (PyMongo)

Beispiel

from pymongo import MongoClient

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

Node.js (Mongoose)

Beispiel

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, 'Verbindungsfehler:'));
db.once('open', function() {
  console.log('Mit MongoDB verbunden');
});

PHP (Mongoose)

Beispiel

<?php
require 'vendor/autoload.php'; // Composer-Autoload-Datei einbinden

$client = new MongoDB\Client("mongodb://localhost:27017"); // Mit lokaler MongoDB-Instanz verbinden
$database = $client->selectDatabase('mydatabase'); // Datenbank auswählen
$collection = $database->selectCollection('mycollection'); // Sammlung auswählen

// Dokument einfügen
$result = $collection->insertOne(['name' => 'Alice', 'age' => 30]);
echo "Eingefügt mit Objekt-ID '{$result->getInsertedId()}'";

// Dokument abfragen
$document = $collection->findOne(['name' => 'Alice']);
echo "Gefundenes Dokument: " . json_encode($document);
?>

Java

Beispiel

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("Mit MongoDB verbunden");
        }
    }
}

Beispiel

Verbinden Sie sich mit dem MongoDB-Dienst über den Standardport.

mongodb://localhost

Verbinden Sie sich über die Shell mit dem MongoDB-Dienst:

./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

Gehen Sie jetzt zurück und sehen Sie sich das Fenster an, in dem Sie den Befehl./mongodausgeführt haben, und Sie können sehen, von wo aus es eine Verbindung zum MongoDB-Server hergestellt hat. Sie können die folgenden Informationen sehen:

……省略信息……
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)  # 该行表明一个来自本机的连接

……省略信息……

Format des MongoDB-Verbindungsbefehls

Um eine Verbindung zum MongoDB-Server mit einem Benutzernamen und einem Passwort herzustellen, müssen Sie das Format 'username:password@hostname/dbname' verwenden, 'username' ist der Benutzername, 'password' ist das Passwort.

Verwenden Sie Benutzername und Passwort, um eine Verbindung zur Standarddatenbank herzustellen und sich anzumelden:

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

Stellen Sie eine Verbindung zum lokalen MongoDB-Dienst her, indem Sie den Benutzer admin mit dem Passwort 123456 verwenden. Das Ausgabeergebnis sieht wie folgt aus:

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

Verwenden Sie Benutzername und Passwort, um eine Verbindung zu einer bestimmten Datenbank herzustellen und sich anzumelden; das Format ist wie folgt:

mongodb://admin:123456@localhost/test

Weitere Verbindungsbeispiele

Stellen Sie eine Verbindung zum lokalen Datenbankserver her; der Port ist der Standardport.

mongodb://localhost

Melden Sie sich bei der admin-Datenbank auf localhost mit dem Benutzernamen fred und dem Passwort foobar an.

mongodb://fred:foobar@localhost

Melden Sie sich bei der baz-Datenbank auf localhost mit dem Benutzernamen fred und dem Passwort foobar an.

mongodb://fred:foobar@localhost/baz

Stellen Sie eine Verbindung zu einem Replica-Paar her, Server 1 ist example1.com, Server 2 ist example2.

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

Stellen Sie eine Verbindung zu einem Replica-Set mit drei Servern her (Ports 27017, 27018 und 27019):

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

Stellen Sie eine Verbindung zu einem Replica-Set mit drei Servern her; Schreiboperationen werden auf dem primären Server ausgeführt und Leseoperationen werden auf die sekundären Server verteilt.

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

Verbinden Sie sich direkt mit dem ersten Server, egal ob er Teil eines Replica-Sets, der primäre Server oder ein sekundärer Server ist.

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

Wenn Ihre Verbindungsserver Priorität haben und Sie außerdem alle Server auflisten müssen, können Sie die oben beschriebene Verbindungsmethode verwenden.

Stellen Sie im Safe-Modus eine Verbindung zu localhost her:

mongodb://localhost/?safe=true

Stellen Sie im Safe-Modus eine Verbindung zum Replica-Set her und warten Sie darauf, dass mindestens zwei Replica-Server erfolgreich schreiben, mit einem Timeout von 2 Sekunden.

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