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

Stringa di connessione in MongoDB (con esempi)

Affinché le app si connettano a un server di database, devono usare una stringa di connessione, che è un'espressione che contiene tutti i parametri necessari. Le stringhe di connessione forniscono l'istanza del server, il nome del database, i dettagli di autenticazione e altri parametri per interagire con il server del database.

Formati per le stringhe di connessione

Uno dei metodi forniti imposterà una stringa di connessione MongoDB. Il formato di connessione elenco seme DNS o il formato stringa di connessione standard.

Il formato standard per collegare le stringhe

Esistono tre tipi di base di implementazioni MongoDB:standalone, set di repliche e cluster partizionato, tutti descritti qui.

Questo è il modo tipico per unire gli URI.

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

Esempi:

Autonomo
mongodb://mongodb0.example.com:27017
Standalone che impone il controllo degli accessi:
mongodb://myDBReader:D1fficultP%[email protected]:27017/?authSource=admin
Set di repliche
mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
Set di repliche che impone il controllo dell'accesso:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl
Cluster frammentato
mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017
Cluster con partizionamento orizzontale che impone il controllo dell'accesso:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongos1.example.com:27017,mongos2.example.com:27017/?authSource=admin

Componenti di una stringa di connessione

Componenti della stringa di connessione URI standard:

  1. mongodb:// – Un prefisso necessario che indica una stringa di connessione standard.
  2. nome utente:password@ – Le credenziali di autenticazione sono facoltative. Se viene fornito authSource, il client proverà ad autenticare l'utente. Senza specificare un authSource, il client verificherà l'utente rispetto al defaultauthdb. Inoltre, il database admin viene utilizzato se non viene fornito il defaultauthdb.
  3. host[:porta] – L'host (e facoltativamente il numero di porta) su cui opera l'istanza mongod (o l'istanza mongos nel caso di un cluster partizionato). È possibile indicare un nome host, un indirizzo IP o un socket in un dominio UNIX. Indica il numero di host richiesti per la tua topologia di rollout:
    Nel caso di una singola istanza mongod, fornisci il nome host dell'istanza mongod.
    Fornisci i nomi host delle istanze mongod specificate nelle impostazioni del set di repliche per un set di repliche.
    Indicare i nomi host dell'istanza mongos per un cluster partizionato. Senza specificare un numero di porta, viene utilizzata la porta generica 27017.
  4. /defaultauthdb – Opzionale. Se la stringa di connessione contiene username:password@ credenziali, ma non viene fornita l'opzione authSource, viene utilizzato il database di autenticazione. Il client utilizza il database di amministrazione per autenticare l'utente se non vengono forniti sia authSource che defaultauthdb.
  5. ? Opzionale. I parametri specifici della connessione sono specificati nelle coppie nome>=valore> nella stringa di query. L'elenco delle scelte disponibili può essere visualizzato nella sezione Opzioni della stringa di connessione. La barra (/) deve essere inclusa tra l'host e il punto interrogativo (?) per iniziare la stringa delle opzioni se non è specificato alcun database nella stringa di connessione.

Formato di connessione per l'elenco seme DNS

C'è anche un elenco di semi costruito da DNS per le connessioni MongoDB. L'utilizzo del DNS per creare l'elenco dei server accessibili offre maggiore flessibilità di distribuzione e la possibilità di cambiare server in cicli senza riconfigurare i client.

Utilizzare il prefisso mongodb+srv invece del normale prefisso della stringa di connessione MongoDB per utilizzare l'elenco seme DNS. Per comunicare all'utente che il nome host seguente è un record SRV DNS, utilizzare il prefisso +srv. Successivamente, il mongosh o il driver interrogherà il Domain Name System (DNS) per scoprire quali host stanno eseguendo le istanze mongod.

Nota: L'opzione tls (o il corrispondente ssl) è impostata su true se viene utilizzata la variabile della stringa di connessione +srv. Specificando esplicitamente l'opzione tls su false nella stringa di query, puoi ignorare questo comportamento e utilizzare invece tls=false.

Le stringhe di connessione dell'elenco seme DNS hanno spesso l'aspetto del seguente esempio:

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

La configurazione del DNS può assomigliare a questa:

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.

La connessione con i membri dell'elenco seme fornisce ai client l'accesso a una directory di altri membri del set di repliche per stabilire una connessione. L'host può produrre un elenco di server diverso dall'elenco seme poiché i client utilizzano comunemente alias DNS nei loro elenchi seme. È possibile accedere ai membri del set di repliche solo tramite i loro nomi host; pertanto, se ciò si verifica, gli utenti utilizzeranno i nomi host forniti dalla replica anziché quelli indicati nell'elenco seme.

Nota: I record SRV forniti dal nome host specificato devono avere lo stesso dominio padre (esempio.com) del nome host stesso. Non ti sarà consentito connetterti se i domini principali e i nomi host non corrispondono.

Inoltre, le stringhe di connessione dell'elenco seme DNS consentono di fornire parametri come parte di un URL allo stesso modo di quelli ordinari. È inoltre possibile utilizzare un record TXT per indicare le seguenti impostazioni quando si utilizza una stringa di connessione dell'elenco seme DNS:

authSource
replicaSet

È possibile specificare un solo record TXT per ogni istanza mongod. Il client restituirà un errore se il DNS ha più voci TXT o se la voce TXT contiene un attributo diverso da replicaSet o authSource.

Il record TXT per server.example.com sarebbe simile a questo:

Record              TTL   Class    Text

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

Questa stringa di connessione viene generata dalle voci DNS SRV e dalle impostazioni del record TXT come segue:

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

Le scelte di un record TXT possono essere ignorate fornendo il parametro della stringa di query dell'URL. La stringa di query nello scenario seguente sovrascrive l'opzione authSource impostata nel record TXT della voce DNS.

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

Usando l'override di authSource, la tipica stringa di connessione sarebbe simile a questa:

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

Nota: Se al nome host specificato nella stringa di connessione non sono associati record DNS, il parametro mongodb+srv avrà esito negativo. Come ultima nota, quando si utilizza la modifica della stringa di connessione +srv, l'opzione per utilizzare TLS (o la sicurezza SSL equivalente) è impostata su true per la connessione. Specificando esplicitamente l'opzione tls su false nella stringa di query, puoi ignorare questo comportamento e utilizzare invece tls=false.

Ottieni la tua stringa di connessione MongoDB

Avrai bisogno di una stringa URI per connetterti a MongoDB. Se ti colleghi a una distribuzione MongoDB utilizzando mongo shell, Compass o i driver MongoDB, ti verrà chiesto l'URI (Uniform Resource Identifier).

Si presume che tu abbia già impostato l'autenticazione in MongoDB e generato un nome utente e una password per i diritti di lettura e scrittura su un database MongoDB quando utilizzi la stringa URI fornita.

In questo caso, puoi utilizzare il login e la password che hai creato per il ruolo readWriteAnyDatabase oltre al nome del database admin nella stringa di connessione per connetterti a MongoDB.

Opzioni per la stringa di connessione

Questa sezione spiega i vari modi in cui puoi connetterti a Internet.

  1. Sotto forma di una coppia nome=valore, sono disponibili opzioni di connessione.
  2. Quando si utilizza un driver, il nome dell'opzione non fa distinzione tra maiuscole e minuscole.
  3. Il nome dell'opzione non fa distinzione tra maiuscole e minuscole quando si utilizza mongosh o la tradizionale mongo shell (versione 4.2 o successive).
  4. Il nome dell'opzione fa distinzione tra maiuscole e minuscole quando si utilizza una versione 4.0 o una precedente mongo shell.
  5. Il caso non è mai un problema durante la visualizzazione del valore.

La e commerciale (&) può separare le scelte, come nome1=valore1&nome2=valore2. I parametri ReplicaSet e connectTimeoutMS sono inclusi nella connessione seguente:

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

Nota: I driver ora accettano punti e virgola (;) come separatori di opzioni per preservare la compatibilità con il software precedente.

Esempi di stringhe di connessione

Troverai esempi di URI per punti di connessione popolari negli esempi seguenti.

Esegui il server database in locale

La porta predefinita di un server di database locale può essere utilizzata per stabilire una connessione con il comando seguente:

mongodb://localhost
Banca dati amministrativa

Per accedere al database admin come foss con la password fosslinux, è necessario seguire i seguenti comandi:

mongodb://foss:fosslinux@localhost
Un database di record

Connessione e accesso al database dei record utilizzando la password fosslinux come amministratore di sistema.

mongodb://foss:fosslinux@localhost/records
Socket di dominio in UNIX

Quando ci si collega a un socket di dominio UNIX, utilizzare una stringa di connessione crittografata con URL.

MongoDB si collega a un endpoint di dominio UNIX con il seguente percorso:

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

Nota: tutti i driver non supportano i socket di dominio UNIX. Per ulteriori informazioni sul tuo driver, vai alla sezione Documentazione del driver.

Replica impostata con utenti su macchine distinte

Di seguito è riportata una connessione a una replica a due membri impostata su db1.example.net e db2.example.net:

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

Nota: Le istanze mongod fornite nella configurazione del set di repliche devono essere specificate per un set di repliche.

Set di repliche con utenti su localhost

Le porte 27017, 27018 e 27019 vengono utilizzate per stabilire una connessione a un set di repliche che opera su localhost:

mongodb://localhost,localhost:27018,localhost:27019/?replicaSet=test
Leggi il set di repliche di distribuzione

La connessione a un set di repliche a tre membri e la distribuzione delle letture ai membri secondari comporta il metodo elencato di seguito:

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&readPreference=secondary
Set di repliche per problemi di scrittura di alto livello

La connessione a un set di repliche contenente problemi di scrittura e un timeout di due secondi durante l'attesa della replica nella maggior parte dei membri votanti contenenti dati viene eseguita utilizzando questa configurazione:

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

È possibile connettersi a un cluster partizionato a più istanze utilizzando quanto segue:

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

Quanto segue stabilisce una connessione a un cluster MongoDB Atlas utilizzando le credenziali AWS IAM per l'autenticazione:

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

Questo esempio mostra come utilizzare il metodo di autenticazione MONGODB-AWS e $external authSource per connettersi ad Atlas tramite le credenziali AWS IAM.

Il valore authMechanismProperties di AWS SESSION TOKEN deve essere fornito se stai utilizzando un token di sessione AWS, come segue:

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

Nota: A condizione che l'ID chiave di accesso AWS o la chiave di accesso segreta contenga uno dei seguenti caratteri:(: / ? # [ ] @ ), è necessario utilizzare la codifica percentuale per codificarli.

Puoi anche utilizzare le normali variabili di ambiente AWS IAM per specificare queste credenziali sulla tua piattaforma. Quando si utilizza l'autenticazione MONGODB-AWS, mongosh verifica e verifica se sono presenti le seguenti variabili di ambiente:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

Non è necessario che una stringa di connessione includa queste credenziali se configurata.

Nella shell bash, le seguenti variabili sono impostate nell'esempio seguente:

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

La sintassi per stabilire le variabili di ambiente sarà diversa in altre shell, quindi tienilo presente. Per ulteriori informazioni, vai alla documentazione della tua piattaforma.

Il comando seguente confermerà se alcune variabili di ambiente sono state impostate o meno:

env | grep AWS

Il codice seguente mostra come stabilire una connessione a un cluster MongoDB Atlas utilizzando le variabili elencate di seguito:

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

Questo è tutto ciò che devi sapere sulle stringhe di connessione in MongoDB. Ci auguriamo che tu abbia trovato utile la guida all'articolo. Se sì, si prega di lasciare un commento nella sezione commenti. Grazie per la lettura.