sql >> Database teknologi >  >> NoSQL >> MongoDB

Forbindelsesstreng i MongoDB (med eksempler)

For at apps kan oprette forbindelse til en databaseserver, skal de bruge en forbindelsesstreng, som er et udtryk, der indeholder alle de nødvendige parametre. Forbindelsesstrenge giver serverforekomsten, databasenavnet, godkendelsesdetaljerne og andre parametre til interaktion med databaseserveren.

Formater til forbindelsesstrenge

En af de givne metoder vil oprette en MongoDB-forbindelsesstreng. DNS Seed List Connection Format eller Standard Connection String Format.

Standardformatet til at forbinde strenge

Der er tre grundlæggende typer MongoDB-implementeringer:enkeltstående, replikasæt og sharded cluster, som alle er beskrevet her.

Dette er den typiske måde at tilslutte sig URI'er.

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

Eksempler:

Fristående
mongodb://mongodb0.example.com:27017
Fristående, der håndhæver adgangskontrol:
mongodb://myDBReader:D1fficultP%[email protected]:27017/?authSource=admin
Replikasæt
mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
Replikasæt, der håndhæver adgangskontrol:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl
Sharded klynge
mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017
Sharded klynge, der håndhæver adgangskontrol:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongos1.example.com:27017,mongos2.example.com:27017/?authSource=admin

Komponenter af en forbindelsesstreng

Komponenter af standard URI-forbindelsesstrengen:

  1. mongodb:// – Et nødvendigt præfiks, der angiver en standardforbindelsesstreng.
  2. brugernavn:adgangskode@ – Godkendelseslegitimationsoplysninger er valgfrie. Hvis authSource er givet, vil klienten forsøge at godkende brugeren. Uden at angive en authSource, vil klienten verificere brugeren mod defaultauthdb. Derudover bruges admin-databasen, hvis defaultauthdb ikke er givet.
  3. vært[:port] – Værten (og eventuelt portnummeret), som mongod-instansen opererer på (eller mongos-instansen i tilfælde af en sharded cluster). Du kan angive et værtsnavn, en IP-adresse eller en socket i et UNIX-domæne. Angiv antallet af værter, der kræves til din udrulningstopologi:
    Hvis der er tale om en enkelt mongod-forekomst, skal du angive værtsnavnet på mongod-forekomsten.
    Angiv værtsnavnet/-navnene på de angivne mongod-forekomster. i replikasætindstillingerne for et replikasæt.
    Angiv mongos-forekomstens værtsnavn(e) for en sharded cluster. Uden at angive et portnummer, bruges den generiske port 27017.
  4. /defaultauthdb – Valgfri. Hvis forbindelsesstrengen indeholder brugernavn:adgangskode@-legitimationsoplysninger, men authSource-indstillingen ikke er angivet, bruges godkendelsesdatabasen. Klienten bruger admin-databasen til at godkende brugeren, hvis både authSource og defaultauthdb ikke er givet.
  5. ? Valgfri. Forbindelsesspecifikke parametre er angivet i navn>=værdi> par i forespørgselsstrengen. Listen over tilgængelige valg kan ses i afsnittet Forbindelsesstrengindstillinger. Skråstreg (/) skal inkluderes mellem værten og spørgsmålstegnet (?) for at starte indstillingsstrengen, hvis der ikke er angivet nogen database i forbindelsesstrengen.

Forbindelsesformat for DNS Seed List

Der er også en DNS-konstrueret seed-liste til MongoDB-forbindelser. Brug af DNS til at opbygge listen over tilgængelige servere giver større implementeringsfleksibilitet og mulighed for at skifte server i cyklusser uden at omkonfigurere klienter.

Brug mongodb+srv-præfikset i stedet for det almindelige MongoDB-forbindelsesstrengpræfiks for at bruge DNS-seed-listen. For at fortælle brugeren, at det følgende værtsnavn er en DNS SRV-post, skal du bruge +srv-præfikset. Bagefter vil mongoshen eller driveren forespørge domænenavnesystemet (DNS) for at finde ud af, hvilke værter der udfører mongod-forekomsterne.

Bemærk: tls (eller den tilsvarende ssl)-indstilling er sat til sand, hvis +srv-forbindelsesstrengvariablen bruges. Ved eksplicit at angive tls-indstillingen til false i forespørgselsstrengen, kan du tilsidesætte denne adfærd og bruge tls=false i stedet.

DNS-frølisteforbindelsesstrenge ser ofte ud som følgende eksempel:

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

DNS-opsætningen kan se sådan ud:

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.

Forbindelse med medlemmer af frølisten giver klienter adgang til en mappe med andre replikasætmedlemmer for at etablere en forbindelse. Værten kan producere en serverliste, der er forskellig fra seed-listen, da klienter almindeligvis bruger DNS-aliasser i deres seed-lister. Medlemmer af replikasæt kan kun tilgås via deres værtsnavne; Hvis dette sker, vil brugerne derfor bruge værtsnavnene givet af replikationen i stedet for dem, der er angivet i frølisten.

Bemærk: SRV-posterne, der leveres af det angivne værtsnavn, skal have det samme overordnede domæne (example.com) som selve værtsnavnet. Du får ikke tilladelse til at oprette forbindelse, hvis de overordnede domæner og værtsnavne ikke stemmer overens.

Derudover giver DNS-frølisteforbindelsesstrenge dig mulighed for at angive parametre som en del af en URL på samme måde, som almindelige gør. Du kan også bruge en TXT-record til at angive følgende indstillinger, når du bruger en DNS-frølisteforbindelsesstreng:

authSource
replicaSet

Der kan kun specificeres én TXT-post for hver mongod-instans. Klienten returnerer en fejl, hvis DNS'en har flere TXT-poster, eller hvis TXT-indgangen indeholder en anden attribut end replicaSet eller authSource.

TXT-posten for server.example.com ville se sådan ud:

Record              TTL   Class    Text

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

Denne forbindelsesstreng genereres fra DNS SRV-posterne samt TXT-postindstillingerne som følger:

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

En TXT-posts valg kan tilsidesættes ved at angive URL'ens forespørgselsstrengparameter. Forespørgselsstrengen i følgende scenarie tilsidesætter den authSource-indstilling, der er angivet i DNS-postens TXT-post.

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

Ved at bruge authSource-tilsidesættelsen vil den typiske forbindelsesstreng se sådan ud:

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

Bemærk: Hvis værtsnavnet angivet i forbindelsesstrengen ikke har nogen DNS-poster tilknyttet, vil parameteren mongodb+srv mislykkes. Som en sidste bemærkning, når du bruger +srv-forbindelsesstrengmodifikationen, er muligheden for at bruge TLS (eller den tilsvarende SSL-sikkerhed) sat til sand for forbindelsen. Ved eksplicit at angive tls-indstillingen til false i forespørgselsstrengen, kan du tilsidesætte denne adfærd og bruge tls=false i stedet.

Få din MongoDB-forbindelsesstreng

Du skal bruge en URI-streng for at oprette forbindelse til MongoDB. Hvis du linker til en MongoDB-implementering ved hjælp af mongo-skallen, kompasset eller MongoDB-driverne, bliver du bedt om URI'en (Uniform Resource Identifier).

Det antages, at du allerede har opsat godkendelse i MongoDB og genereret et brugernavn og adgangskode til læse- og skriverettigheder til en MongoDB-database, når du bruger den medfølgende URI-streng.

I dette tilfælde kan du bruge det login og den adgangskode, du oprettede til rollen readWriteAnyDatabase samt admin-databasenavnet i din forbindelsesstreng til at oprette forbindelse til MongoDB.

Indstillinger for forbindelsesstrengen

Dette afsnit forklarer de forskellige måder, du kan oprette forbindelse til internettet på.

  1. I form af et navn=værdi-par er forbindelsesmuligheder tilgængelige.
  2. Når du bruger en driver, er indstillingsnavnet ufølsomt.
  3. Indstillingsnavnet er ufølsomt for store og små bogstaver, når du bruger mongosh eller den traditionelle mongo-skal (version 4.2 eller nyere).
  4. Indstillingens navn skelner mellem store og små bogstaver, når du bruger en version 4.0 eller tidligere ældre mongo-shell.
  5. Kassen er aldrig et problem, når værdien vises.

Et-tegnet (&) kan adskille valg, såsom navn1=værdi1&navn2=værdi2. ReplicaSet og connectTimeoutMS parametre er inkluderet i følgende forbindelse:

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

Bemærk: Drivere accepterer nu semikolon (;) som valgmulighedsseparatorer for at bevare kompatibiliteten med ældre software.

Eksempler på forbindelsesstrenge

Du finder URI-eksempler for populære forbindelsespunkter i eksemplerne nedenfor.

Kør databaseserveren lokalt

Standardporten på en lokal databaseserver kan bruges til at etablere en forbindelse med følgende kommando:

mongodb://localhost
Administrativ database

For at logge på admin-databasen som foss med adgangskoden fosslinux, skal følgende kommandoer følges:

mongodb://foss:fosslinux@localhost
En database med poster

Tilslutning og log ind på postdatabasen ved hjælp af adgangskoden fosslinux som systemadministrator.

mongodb://foss:fosslinux@localhost/records
Domæne-sockets i UNIX

Når du tilslutter en UNIX-domæne-socket, skal du bruge en URL-krypteret forbindelsesstreng.

MongoDB linker til et UNIX-domæneslutpunkt med følgende sti:

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

Bemærk: alle drivere understøtter ikke UNIX-domæne-sockets. For at lære mere om din driver, gå til afsnittet Driverdokumentation.

Replikasæt med brugere på forskellige maskiner

Nedenfor er en forbindelse til et to-medlems replikasæt på db1.example.net og db2.example.net:

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

Bemærk: Mongod-forekomsterne, der er angivet i replikasæt-konfigurationen, skal angives for et replikasæt.

Replikasæt med brugere på localhost

Portene 27017, 27018 og 27019 bruges til at etablere en forbindelse til et replikasæt, der opererer på localhost:

mongodb://localhost,localhost:27018,localhost:27019/?replicaSet=test
Læs distributionsrepliksæt

Tilslutning til et replikasæt med tre medlemmer og fordeling af læsninger til de sekundære medlemmer indebærer nedenstående metode:

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&readPreference=secondary
Replikasæt til skrivebekymring på højt niveau

Tilslutning til et replikasæt, der indeholder skriveproblemer og en timeout på to sekunder, mens man venter på replikering på tværs af et flertal af databærende stemmeberettigede medlemmer, udføres ved hjælp af denne konfiguration:

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

Det er muligt at oprette forbindelse til en fragmenteret klynge med flere forekomster ved at bruge følgende:

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

Følgende etablerer en forbindelse til en MongoDB Atlas-klynge ved hjælp af AWS IAM-legitimationsoplysninger til godkendelse:

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

Dette eksempel viser, hvordan man bruger MONGODB-AWS-godkendelsesmetoden og $external authSource til at oprette forbindelse til Atlas via AWS IAM-legitimationsoplysninger.

AWS SESSION TOKEN authMechanismProperties-værdien skal angives, hvis du bruger et AWS-sessionstoken, som følger:

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>'

Bemærk: Så længe AWS-adgangsnøgle-id'et eller den hemmelige adgangsnøgle indeholder et af følgende tegn:(: / ? # [ ] @ ), skal du bruge procent-kodning til at kode dem.

Du kan også bruge almindelige AWS IAM-miljøvariabler til at angive disse legitimationsoplysninger på din platform. Når du bruger MONGODB-AWS-godkendelse, kontrollerer og fastslår mongosh, om følgende miljøvariable er til stede:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

En forbindelsesstreng behøver ikke at inkludere disse legitimationsoplysninger, hvis den er konfigureret.

I bash-skallen indstilles følgende variabler i følgende eksempel:

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>'

Syntaksen for etablering af miljøvariabler vil afvige i andre skaller, så vær opmærksom på dette. For yderligere information, gå til din platforms dokumentation.

Følgende kommando vil bekræfte, om visse miljøvariabler er blevet indstillet:

env | grep AWS

Følgende kode viser, hvordan man etablerer en forbindelse til en MongoDB Atlas-klynge ved at bruge variabler anført nedenfor:

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

Det er alt, du behøver at vide om forbindelsesstrenge i MongoDB. Vi håber, du fandt artikelguiden nyttig. Hvis ja, så skriv venligst en bemærkning i kommentarfeltet. Tak fordi du læste med.


  1. Mongo felt A større end felt B

  2. MongoDB $type Aggregation Pipeline Operator

  3. Spring data rest-applikation henter ikke data fra databasen efter implementering af redis caching

  4. Timeout udfører SET {Key}, inst:0, mgr:Inaktiv, kø:2, qu=1, qs=1, qc=0, wr=1/1, in=0/0