MongoDB Shell è un ambiente REPL (Read-Eval-Print Loop) adattivo basato su JavaScript e Node.js per lavorare con le implementazioni MongoDB. È uno strumento fondamentale per interrogare i dati, amministrare i database ed eseguire diverse operazioni. Offre un’interfaccia intuitiva per gestire i database, sia in remoto che in locale.
Questo articolo illustra passo dopo passo come utilizzare la MongoDB Shell.
Prima di iniziare, assicurati che la Shell sia installata sul sistema. In caso contrario, scarica la versione appropriata dal sito ufficiale e segui le istruzioni di installazione per il tuo sistema operativo.
Visita la pagina ufficiale, seleziona la versione Windows e avvia il download.
Nella pagina ufficiale, scegli la versione per macOS e avvia il download. In alternativa, puoi usare Homebrew eseguendo i seguenti comandi:
brew tap mongodb/brew
brew install mongosh
Consulta le istruzioni fornite sul sito per il sistema operativo Linux. Ad esempio, su un sistema basato su Debian, segui questi passaggi:
Aggiungi la chiave GPG per il repository MongoDB:
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
Aggiungi il repository MongoDB al tuo sistema:
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
Aggiorna l’elenco dei pacchetti:
sudo apt update
Installa MongoDB:
sudo apt install mongodb-org -y

Dopo l’installazione, verifica la versione installata:
mongod --version

Una volta completata l’installazione, abilita, avvia e controlla il servizio:
sudo systemctl enable mongod
sudo systemctl start mongod
sudo systemctl status mongod

Se cerchi una soluzione affidabile, ad alte prestazioni e conveniente per i tuoi flussi di lavoro, Hostman offre opzioni di hosting VPS Linux, tra cui Debian VPS, Ubuntu VPS e VPS CentOS.
Dopo l’installazione, puoi stabilire una connessione a un’istanza. Se è locale, digita mongosh. Per impostazione predefinita, si connette all’istanza in esecuzione sulla porta 27017 su localhost:
Once the installation is done, you can establish connections to its instance. If it is local, enter mongosh. It establishes the connection to the instance by default. It is running at port 27017 on localhost:
mongosh

La seguente sintassi viene utilizzata per connettersi a un server remoto:
mongodb+srv://<nome_utente>:<password>@<indirizzo_cluster>/<database>?retryWrites=true&w=majority
Sostituisci <nome_utente>, <password>, <indirizzo_cluster> e <database> con le credenziali e i dettagli di connessione reali.
Una volta connesso, puoi lavorare con i database. Prima di procedere, l’interfaccia mostra un messaggio di benvenuto:

Il database assegnato a una nuova istanza Shell si chiama test. Può essere usato in sicurezza per esperimenti.
Operazioni utili sono elencate di seguito:
Esegui show dbs per ottenere un elenco di tutti i database disponibili:
show dbs

La maggior parte dei comandi opera su un database o una raccolta contenuta al suo interno. L’oggetto db rappresenta il database attualmente selezionato:
db

Digita il comando use seguito dal nome del database, ad esempio new_db, per crearlo o passare a esso:
use new_db

Sostituisci new_db con il nome reale del database.
Per prima cosa, inserisci un oggetto con un nome in student_data all’interno del database new_db esistente:
db.student_data.insertOne({name: 'School has 500 students'})

Puoi anche inserire più documenti in student_data, ciascuno con un campo name contenente valori specifici. Questo consente l’inserimento in batch dei dati nella raccolta:
db.student_data.insertMany([
{name: 'School has 500 students'},
{name: 'School has 600 students'}
])

Dopo l’inserimento, visualizza le collezioni esistenti:
show collections

Se non desideri eseguire altre operazioni, esci dall’interfaccia digitando:
exit

Hai ora compreso le operazioni di base della Shell.
Quando si lavora con la Shell, le operazioni CRUD (Create, Read, Update, Delete) sono fondamentali. Eseguiamo alcune operazioni di base:
Quando inserisci nuove informazioni in una raccolta, utilizza la funzione insertOne. Creiamo una nuova raccolta e la popoliamo con le informazioni necessarie, inclusi name (nome), age (età) e city (città):
db.collection.insertOne({ name: "Harry", age: 45, city: "Sydney" })

Puoi interrogare i documenti associati alla raccolta usando la funzione find. Ad esempio, vengono recuperate tutte le voci con un’età superiore a 25:
db.collection.find({ age: { $gt: 25 } }) // Condizione in cui l’età è maggiore di 25

Usa le funzioni updateOne o updateMany per modificare i documenti esistenti. Ad esempio, l’età di Harry viene aggiornata a 50:
db.collection.updateOne({ name: "Harry" }, { $set: { age: 50 } })

Usa i metodi deleteOne o deleteMany per rimuovere voci dalla raccolta. Questo comando elimina un documento con il valore John nel campo name:
db.collection.deleteOne({ name: "John" })

In questo passaggio, esegui operazioni complesse tramite funzionalità avanzate. Grazie agli strumenti di debug, profilazione e ottimizzazione delle prestazioni, la Shell aiuta a identificare i colli di bottiglia e migliorare la configurazione.
Con le pipeline è possibile elaborare record e ottenere risultati aggregati. Le pipeline consentono di creare analisi e trasformazioni complesse per estrarre informazioni preziose dai dati grezzi. Per eseguire una pipeline di fasi, utilizza la funzione aggregate. Ecco un esempio:
db.collection.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: "$city", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } }
])

In questo script, la pipeline filtra i documenti con stato A, li raggruppa per city, somma gli importi e ordina i risultati in ordine decrescente.
La pipeline di aggregazione è uno strumento potente per l’analisi e la trasformazione dei dati. È composta da più fasi, ognuna delle quali modifica il flusso di documenti. Queste fasi includono:
$project: seleziona o esclude campi specifici.
$match: applica una condizione di query per filtrare i documenti.
$group: raggruppa i dati per un campo e calcola aggregazioni.
$sort: ordina i risultati in base a un campo specifico.
$limit: limita il numero di record.
$skip: salta un numero definito di record.
Un paradigma efficace per elaborare grandi set di dati. Per eseguire attività MapReduce, utilizza il comando mapReduce:
// Dati di esempio
db.collection.insertMany([
{ name: "Harry", age: 25, salary: 5000 },
{ name: "Buttler", age: 30, salary: 6000 },
{ name: "Morgan", age: 35, salary: 7000 }
]);
// Funzione Map
var mapFunction = function() {
emit(this.age, this.salary);
};
// Funzione Reduce
var reduceFunction = function(keyAge, valuesSalaries) {
return Array.sum(valuesSalaries);
};
// Esegui MapReduce
db.runCommand({
mapreduce: "collection",
map: mapFunction,
reduce: reduceFunction,
out: "results"
});
db.results.find().forEach(printjson); // Mostra i risultati

In questo esempio, la funzione mapFunction emette l’età come chiave e lo stipendio come valore.
La funzione reduceFunction somma gli stipendi per ogni gruppo di età.
I risultati vengono salvati in una nuova raccolta chiamata results, e l’output finale viene mostrato con db.results.find().forEach(printjson).
Il risultato è mostrato di seguito:

Utilizza l’operatore di proiezione per specificare quali campi includere o escludere nei risultati. Recupera tutte le informazioni associate a una query, ad esempio mostrando solo i campi name e age. Questo ti consente di visualizzare risultati specifici ed escluderne altri. Proiettiamo solo i campi name e age:
db.collection.find({}, { name: 1, age: 1 })

Ordina i risultati utilizzando la funzione sort. Recupera tutti i documenti del set e li ordina in ordine decrescente in base all’età, mostrando per primi i valori più alti. Ordiniamo per età in ordine decrescente:
db.collection.find().sort({ age: -1 })

Gli utenti possono limitare il numero di risultati con la funzione limit. Ad esempio, ottieni i primi tre documenti della raccolta. È utile per visualizzare un piccolo sottoinsieme di dati senza recuperare l’intero elenco. Limitiamo i risultati a 3:
db.collection.find().limit(3)

Puoi saltare delle voci utilizzando la funzione skip. Ad esempio, saltare i primi due documenti della raccolta. È utile per la paginazione o per ignorare i primi record. Saltiamo i primi 2 risultati:
db.collection.find().skip(2)

Gli utenti possono scrivere script per automatizzare le attività all’interno della Shell. Per farlo, salva lo script in un file .js ed eseguilo con mongosh. È utile per eseguire attività ripetitive in modo efficiente, come il popolamento dei dati o gli aggiornamenti batch:
mongosh script.js

Padroneggiando i comandi di MongoDB, puoi ottenere preziose informazioni dai tuoi dati.
Con l’interfaccia interattiva di MongoDB Shell puoi eseguire attività amministrative ricorrenti come scrittura, lettura e modifica. Inoltre, puoi interrogare raccolte esistenti, aggiungere nuovi oggetti al database ed eseguire attività di gestione. Dalle semplici operazioni CRUD alle aggregazioni e agli script complessi, gli utenti possono utilizzare l’interfaccia per eseguire una vasta gamma di operazioni.
Eseguendo script, gli utenti possono automatizzare in modo efficiente attività ripetitive. Questo tutorial ha trattato l’installazione, la configurazione e la gestione di database, raccolte e utenti.