sql >> Database >  >> NoSQL >> MongoDB

Connection String in MongoDB (met voorbeelden)

Om apps verbinding te laten maken met een databaseserver, moeten ze een verbindingsreeks gebruiken, een expressie die alle benodigde parameters bevat. Verbindingsreeksen bieden de serverinstantie, databasenaam, authenticatiedetails en andere parameters voor interactie met de databaseserver.

Formaten voor verbindingsreeksen

Met elk van de gegeven methoden wordt een MongoDB-verbindingsreeks ingesteld. Het DNS Seed List-verbindingsformaat of het standaard verbindingsreeksformaat.

Het standaardformaat voor het verbinden van strings

Er zijn drie basistypen MongoDB-implementaties:standalone, replicaset en sharded-cluster, die hier allemaal worden beschreven.

Dit is de typische manier om URI's aan te sluiten.

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

Voorbeelden:

Zelfstandig
mongodb://mongodb0.example.com:27017
Standalone die toegangscontrole afdwingt:
mongodb://myDBReader:D1fficultP%[email protected]:27017/?authSource=admin
Replicaset
mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
Replicaset die toegangscontrole afdwingt:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl
Sharded cluster
mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017
Sharded cluster dat toegangscontrole afdwingt:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongos1.example.com:27017,mongos2.example.com:27017/?authSource=admin

Componenten van een verbindingsreeks

Onderdelen van de standaard URI-verbindingsreeks:

  1. mongodb:// – Een noodzakelijk voorvoegsel dat een standaard verbindingsreeks aangeeft.
  2. gebruikersnaam:wachtwoord@ – Verificatiegegevens zijn optioneel. Als de authSource wordt gegeven, zal de client proberen de gebruiker te authenticeren. Zonder een authSource op te geven, zal de client de gebruiker verifiëren aan de hand van de defaultauthdb. Bovendien wordt de beheerdersdatabase gebruikt als de defaultauthdb niet is opgegeven.
  3. host[:port] – De host (en optioneel het poortnummer) waarop de mongod-instantie actief is (of mongos-instantie in het geval van een shard-cluster). U kunt een hostnaam, een IP-adres of een socket in een UNIX-domein aangeven. Geef het aantal hosts aan dat nodig is voor uw uitroltopologie:
    Geef in het geval van een enkele mongod-instantie de hostnaam van de mongod-instantie op.
    Geef de hostnaam(en) op van de opgegeven mongod-instantie(s) in de replicasetinstellingen voor een replicaset.
    Geef de hostname(s) van de mongos-instantie op voor een shard-cluster. Zonder een poortnummer op te geven, wordt de generieke poort 27017 gebruikt.
  4. /defaultauthdb – Optioneel. Als de verbindingsreeks gebruikersnaam:wachtwoord@referenties bevat, maar de optie authSource niet is opgegeven, wordt de verificatiedatabase gebruikt. De client gebruikt de beheerdersdatabase om de gebruiker te authenticeren als zowel authSource als defaultauthdb niet zijn opgegeven.
  5. ? Optioneel. Verbindingsspecifieke parameters worden gespecificeerd in name>=value> pairs in de queryreeks. De lijst met beschikbare keuzes kan worden bekeken in de sectie Opties voor verbindingsreeksen. Er moet een schuine streep (/) worden geplaatst tussen de host en het vraagteken (?) om de optiereeks te beginnen als er geen database is opgegeven in de verbindingsreeks.

Verbindingsindeling voor de DNS Seed List

Er is ook een door DNS geconstrueerde seed-lijst voor MongoDB-verbindingen. Het gebruik van DNS om de lijst met toegankelijke servers samen te stellen, biedt meer flexibiliteit bij de implementatie en de mogelijkheid om in cycli van server te wisselen zonder clients opnieuw te configureren.

Gebruik het voorvoegsel mongodb+srv in plaats van het gewone voorvoegsel MongoDB-verbindingsreeks om de DNS-seedlijst te gebruiken. Gebruik het voorvoegsel +srv om de gebruiker te vertellen dat de volgende hostnaam een ​​DNS SRV-record is. Daarna zal de mongosh of het stuurprogramma het domeinnaamsysteem (DNS) ondervragen om te ontdekken welke hosts de mongod-instanties uitvoeren.

Opmerking: De optie tls (of de bijbehorende ssl) is ingesteld op true als de variabele +srv-verbindingsreeks wordt gebruikt. Door de tls-optie expliciet op false op te geven in de queryreeks, kunt u dit gedrag overschrijven en in plaats daarvan tls=false gebruiken.

Verbindingsreeksen voor DNS-seedlijst zien er vaak uit als het volgende voorbeeld:

mongodb+srv://server.example.com/

De DNS-configuratie kan er als volgt uitzien:

Record                            TTL   Class    Priority Weight Port  Target

_mongodb._tcp.server.example.com. 86400 IN SRV   0        5      27317 mongodb1.example.com.

_mongodb._tcp.server.example.com. 86400 IN SRV   0        5      27017 mongodb2.example.com.

Door verbinding te maken met leden van de seed-lijst krijgen clients toegang tot een map met andere leden van de replicaset om een ​​verbinding tot stand te brengen. De host kan een serverlijst produceren die verschilt van de seed-lijst, aangezien clients vaak DNS-aliassen gebruiken in hun seed-lijsten. Leden van replicasets zijn alleen toegankelijk via hun hostnamen; daarom zullen gebruikers, als dit gebeurt, de hostnamen gebruiken die door de replicatie worden gegeven in plaats van die vermeld in de seed-lijst.

Opmerking: De SRV-records die door de opgegeven hostnaam worden geleverd, moeten hetzelfde bovenliggende domein (example.com) hebben als de hostnaam zelf. U mag geen verbinding maken als de bovenliggende domeinen en hostnamen niet overeenkomen.

Bovendien kunt u met verbindingsreeksen voor de DNS-seedlijst parameters opgeven als onderdeel van een URL, op dezelfde manier als gewone. U kunt ook een TXT-record gebruiken om de volgende instellingen aan te geven wanneer u een verbindingsreeks voor de DNS-seedlijst gebruikt:

authSource
replicaSet

Er kan slechts één TXT-record worden opgegeven voor elke mongod-instantie. De client retourneert een fout als de DNS meerdere TXT-vermeldingen heeft of als de TXT-vermelding een ander kenmerk dan replicaSet of authSource bevat.

Het TXT-record voor server.example.com ziet er als volgt uit:

Record              TTL   Class    Text

server.example.com. 86400 IN TXT   "replicaSet=mySet&authSource=authDB"

Deze verbindingsreeks wordt als volgt gegenereerd uit de DNS SRV-vermeldingen en de TXT-recordinstellingen:

mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?replicaSet=mySet&authSource=authDB

De keuzes van een TXT-record kunnen worden overschreven door de queryreeksparameter van de URL op te geven. De queryreeks in het volgende scenario overschrijft de authSource-optie die is ingesteld in de TXT-record van het DNS-item.

mongodb+srv://server.example.com/?connectTimeoutMS=300000&authSource=aDifferentAuthDB

Als u de authSource-overschrijving gebruikt, ziet de typische verbindingsreeks er als volgt uit:

mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?connectTimeoutMS=300000&replicaSet=mySet&authSource=aDifferentAuthDB

Opmerking: Als er geen DNS-records zijn gekoppeld aan de hostnaam die is opgegeven in de verbindingsreeks, mislukt de parameter mongodb+srv. Als laatste opmerking, bij gebruik van de wijziging van de +srv-verbindingsreeks, wordt de optie om TLS (of de equivalente SSL-beveiliging) te gebruiken ingesteld op true voor de verbinding. Door de tls-optie expliciet op false op te geven in de queryreeks, kunt u dit gedrag overschrijven en in plaats daarvan tls=false gebruiken.

Haal uw MongoDB-verbindingsreeks op

U hebt een URI-tekenreeks nodig om verbinding te maken met MongoDB. Als u een koppeling maakt naar een MongoDB-implementatie met behulp van de mongo-shell, Compass of de MongoDB-stuurprogramma's, wordt u om de URI (Uniform Resource Identifier) ​​gevraagd.

Er wordt aangenomen dat u authenticatie al hebt ingesteld in MongoDB en een gebruikersnaam en wachtwoord hebt gegenereerd voor lees- en schrijfrechten op een MongoDB-database wanneer u de verstrekte URI-tekenreeks gebruikt.

In dit geval kunt u de gebruikersnaam en het wachtwoord die u voor de readWriteAnyDatabase-rol heeft gemaakt, evenals de naam van de beheerdersdatabase in uw verbindingsreeks gebruiken om verbinding te maken met MongoDB.

Opties voor de verbindingsreeks

In dit gedeelte worden de verschillende manieren uitgelegd waarop u verbinding kunt maken met internet.

  1. In de vorm van een naam=waarde-paar zijn verbindingsopties beschikbaar.
  2. Bij gebruik van een stuurprogramma is de optienaam niet hoofdlettergevoelig.
  3. De optienaam is niet hoofdlettergevoelig bij gebruik van mongosh of de traditionele mongo-shell (versie 4.2 of hoger).
  4. De optienaam is hoofdlettergevoelig bij gebruik van een versie 4.0 of eerdere legacy mongo-shell.
  5. De case is nooit een probleem bij het weergeven van de waarde.

De ampersand (&) letter kan keuzes scheiden, zoals name1=value1&name2=value2. ReplicaSet en connectTimeoutMS parameters zijn opgenomen in de volgende verbinding:

mongodb://db1.example.net:27017,db2.example.net:2500/?replicaSet=test&connectTimeoutMS=300000

Opmerking: Stuurprogramma's accepteren nu puntkomma's (;) als scheidingstekens voor opties om de compatibiliteit met oudere software te behouden.

Voorbeelden van verbindingsstrings

U vindt URI-voorbeelden voor populaire verbindingspunten in de onderstaande voorbeelden.

Voer de databaseserver lokaal uit

De standaardpoort van een lokale databaseserver kan worden gebruikt om een ​​verbinding tot stand te brengen met het volgende commando:

mongodb://localhost
Administratieve database

Om in te loggen op de admin database als foss met het wachtwoord fosslinux, moeten de volgende commando's gevolgd worden:

mongodb://foss:fosslinux@localhost
Een database met records

Verbinding maken met en inloggen op de records database met het wachtwoord fosslinux als systeembeheerder.

mongodb://foss:fosslinux@localhost/records
Domein-sockets in UNIX

Gebruik een URL-gecodeerde verbindingsreeks wanneer u verbinding maakt met een UNIX-domeinsocket.

MongoDB linkt naar een UNIX-domeineindpunt met het volgende pad:

mongodb://%2Ftmp%2Fmongodb-27017.sock

Opmerking: alle stuurprogramma's ondersteunen geen UNIX-domeinsockets. Ga naar de sectie Driverdocumentatie voor meer informatie over uw chauffeur.

Replica ingesteld met gebruikers op verschillende machines

Hieronder ziet u een verbinding met een replicaset met twee leden op db1.example.net en db2.example.net:

mongodb://db1.example.net,db2.example.com/?replicaSet=test

Opmerking: De mongod-instantie(s) die zijn opgegeven in de configuratie van de replicaset, moeten worden opgegeven voor een replicaset.

Replica ingesteld met gebruikers op localhost

Poorten 27017, 27018 en 27019 worden gebruikt om een ​​verbinding tot stand te brengen met een replicaset die werkt op localhost:

mongodb://localhost,localhost:27018,localhost:27019/?replicaSet=test
Distributiereplicaset lezen

Verbinden met een replicaset met drie leden en het distribueren van reads naar de secundaire leden omvat de onderstaande methode:

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&readPreference=secondary
Replicaset voor schrijfproblemen op hoog niveau

Verbinding maken met een replicaset met schrijfproblemen en een time-out van twee seconden tijdens het wachten op replicatie over een meerderheid van de stemmende leden met gegevens, wordt bereikt met behulp van deze configuratie:

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=majority&wtimeoutMS=2000
Gedeeld cluster

Het is mogelijk om verbinding te maken met een shard-cluster met meerdere instanties door het volgende te gebruiken:

mongodb://router1.example.com:27017,router2.example2.com:27017,router3.example3.com:27017/
MongoDB Atlas-cluster

Het volgende brengt een verbinding tot stand met een MongoDB Atlas-cluster met behulp van AWS IAM-referenties voor authenticatie:

mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

Dit voorbeeld laat zien hoe u de MONGODB-AWS-authenticatiemethode en de $external authSource gebruikt om verbinding te maken met Atlas via AWS IAM-inloggegevens.

De AWS SESSION TOKEN authMechanismProperties-waarde moet als volgt worden opgegeven als u een AWS-sessietoken gebruikt:

mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<aws session token>'

Opmerking: Zolang de AWS-toegangssleutel-ID of de geheime toegangssleutel een van de volgende tekens bevat:(: / ? # [ ] @ ), moet u procentcodering gebruiken om ze te coderen.

U kunt ook gewone AWS IAM-omgevingsvariabelen gebruiken om deze referenties op uw platform op te geven. Bij gebruik van MONGODB-AWS-authenticatie, controleert en stelt Mongosh vast of de volgende omgevingsvariabelen aanwezig zijn:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

Een verbindingsreeks hoeft deze referenties niet te bevatten, indien geconfigureerd.

In de bash-shell worden de volgende variabelen ingesteld in het volgende voorbeeld:

export AWS_ACCESS_KEY_ID='<aws access key id>'

export AWS_SECRET_ACCESS_KEY='<aws secret access key>'

export AWS_SESSION_TOKEN='<aws session token>'

De syntaxis voor het instellen van omgevingsvariabelen zal in andere shells verschillen, dus houd hier rekening mee. Ga voor meer informatie naar de documentatie van uw platform.

De volgende opdracht bevestigt of bepaalde omgevingsvariabelen al dan niet zijn ingesteld:

env | grep AWS

De volgende code laat zien hoe u een verbinding tot stand brengt met een MongoDB Atlas-cluster met behulp van onderstaande variabelen:

mongosh 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

Dat is alles wat u moet weten over verbindingsreeksen in MongoDB. We hopen dat u de artikelgids nuttig vond. Zo ja, laat dan een opmerking achter in het opmerkingenveld. Bedankt voor het lezen.


  1. Hoe u het beste een RESTful API kunt maken in Node.js

  2. MongoSocketReadException:voortijdig einde van stream bereikt (na een periode van inactiviteit)

  3. Hoe duplicaten te verwijderen op basis van een sleutel in Mongodb?

  4. MongoDB naar productie brengen