In questa guida illustreremo i concetti fondamentali di MongoDB e, nel corso delle prossime 15 lezioni, affronteremo gli argomenti principali per avere una chiara comprensione di uno dei sistemi di gestione di database più interessanti e diffusi.
MongoDb è un popolare sistema di gestione di database (DBMS - Database Management System) orientato ai documenti (spiegheremo a breve cosa vuol dire). Fa parte di una più ampia categoria di database a cui ci si riferisce con il termine database NoSQL.
Ciò che accomuna i sistemi NoSQL è la scelta di impiegare dei metodi alternativi al classico modello relazionale per strutturare i database. E da qui nasce la scelta del nome NoSQL per evidenziare che si tratta di una categoria di DBMS che non impiega il liguaggio SQL per l'interrogazione di una base di dati come avviene comunemente nei database relazionali.
Il termine NoSQL viene genericamente usato per identificare tutti quei DBMS che non fanno uso di tabelle per organizzare i dati come i database relazionali. E' bene precisare che ciascun sistema NoSQL può utilizzare una tecnica diversa per strutturare i database non essendoci regole universali in tal senso.
Nella prima lezione della nostra guida a MongoDB ne scopriremo le caratteristiche principali per poi approfondirle, una a d uno, nel proseguo della trattazione.
Come accennato, NoSQL è un termine generico che racchiude un'ampia categoria di DBMS i quali propongono dei metodi alternativi al modello relazionale per strutturare e organizzare i dati all'interno di un database.
MongoDB in particolare è un DBMS NoSQL orientato ai documenti. Al contrario di ciò che avviene nei RDBMS come MySQL, in MongoDB non esiste il concetto di riga...
MongoDB è disponibile in due versioni: Community Edition e Enterprise Edition.
In questa lezione vedremo come installare MongoDB Community Edition (la versione gratuita di MongoDB) in Windows 10, macOS Monterey.
MongoDB Community Edition non ha nessuna limitazione per i fini di questa guida e presenta tutte le funzionalità base necessarie compresi gli strumenti per implementare Replica Set e Sharding.
Come è facile...
Nella precedente lezione abbiamo visto come installare MongoDB in locale, in questa lezione illustreremo come creare un account, configurare MongoDB Atlas e realizzare il nostro primo semplice progetto sfruttando le risorse messe a disposizione da MongoDB.
Cos'è MongoDB Atlas
Atlas è un servizio di database completamente gestito realizzato dallo stesso team che sviluppa MongoDB. È disponibile un piano gratuito, ideale per...
In questa breve lezione vedremo alcuni degli strumenti per esportare ed importare dei dati di un database. Sono quattro i comandi a cui facciamo riferimento che, in base al loro modo di operare e al formato dei file, possiamo classificare in due categorie:
mongoimport e mongoexport per lavorare con file JSON.
mongodump e mongorestore per i file in formato binario (BSON).
Prima...
mongosh è la nuova shell di MongoDB che sostituisce mongo. Al contrario di quest'ultima, non viene distribuita insieme a mongod, ma deve essere installata separatamente. Nelle precedenti lezioni, abbiamo già visto che su Windows basta eseguire il download e l'installazione del corrispondente pacchetto .msi, mentre su macOS viene automaticamente installata se si usa Homebrew.
mongosh è un ambiente di programmazione...
In questa lezione vedremo come creare, aggiornare e rimuovere dei documenti da una collezione.
Prima di iniziare questa lezione, è bene evidenziare che per semplicità, per facilitare la lettura degli esempi e visto che la shell di MongoDB lo consente, i campi delle condizioni di filtro e dei documenti delle collezioni non sono racchiusi fra doppi apici. A voler essere...
In questa lezione vedremo come usare i metodi db.collection.findOne() e db.collection.find() per estrarre dei documenti in base a criteri di selezione più o meno complessi.
Il metodo db.collection.findOne()
Il metodo db.collection.findOne(query, projection) restituisce un solo documento della collezione che soddisfa i criteri del documento passato come primo argomento. Possiamo specificare una o più condizioni aggiungendo più coppie campo/valore al documento. Nel...
Questa lezione sarà una breve introduzione agli indici. Dal momento che si tratta di un argomento abbastanza complesso ed importante, in questa guida ci limiteremo ad illustrare solo i concetti fondamentali. Per maggiori dettagli è consigliato consultare la documentazione ufficiale.
Cos'è un indice
Un indice in MongoDB è una struttura in cui vengono conservate porzioni di dati di una collezione. Per...
Vediamo cosa sono e come si utilizzano i dati geospaziali in MongoDB.
Dati di tipo geospaziali
MongoDB offre la possibilità di salvare all'interno di un documento dei dati di tipo geospaziale. In particolare sono due i formati supportati:
il formato GeoJSON consente di rappresentare oggetti geometrici come punti, linee spezzate e poligoni. È il formato consigliato per salvare le coordinate geografiche in...
Nelle precedenti lezioni abbiamo visto come usare MQL (MongoDB Query Language) per interrogare i database. L'argomento di questa lezione sarà invece l'Aggregation Framework. Faremo spesso riferimento alle collezioni del database di esempio che abbiamo importato in MongoDB Atlas. Se non l'aveste ancora fatto, è consigliato leggere la terza lezione di questa guida in cui spieghiamo come creare un account...
Nel definire la struttura e le relazioni fra le collezioni che costituiscono un database, è opportuno tenere in considerazione vari fattori.
Nei database tradizionali in fase di progettazione di un database e modellazione dei dati si punta a ridurre al minimo le ridondanze attraverso un processo di normalizzazione il quale consiste nello scomporre le tabelle e nel definire dei vincoli...
Nelle precedenti lezioni abbiamo visto come eseguire un'istanza di mongod e come collegarci al server locale tramite mongosh. Non abbiamo però dovuto indicare nessun username o password. Il motivo è che MongoDB non presenta alcun utente predefinito e se non si indica esplicitamente non è necessario alcun meccanismo di autenticazione per accedere al server.
Per ragioni di sicurezza è però...
In questa lezione andremo alla scoperta dei "Replica Set" di MongoDB.
Cos'è un "Replica Set"?
Con il termine "Replica Set" si intende un insieme di istanze di mongod configurate per mantenere lo stessa copia di dati. Tali processi si occupano quindi di replicare le informazioni contenute in un database per garantire un certo livello di resistenza in caso di guasti.
Non bisogna...
In questa lezione vedremo cos'è e come funziona lo " Sharding".
Cos'è lo "Sharding" in MongoDB
Col termine "Sharding" ci si riferisce al meccanismo di partizionamento dei dati di una collezione su diverse macchine. Non è un termine esclusivo di MongoDB, ma si tratta di una funzionalità utilizzabile anche in altri sistemi di gestione di database. Ciò che differenzia però MongoDB...
Abbiamo a cuore la tua privacy
Noi e i nostri partner archiviamo e/o accediamo a informazioni su un dispositivo. Cookie, identificatori del dispositivo o analoghi identificatori online (ad es. identificatori basati sull’accesso, identificatori assegnati casualmente, identificatori basati sulla rete) insieme ad altre informazioni (ad es. tipo di browser e informazioni sul browser, lingua, dimensioni dello schermo, tecnologie supportate, ecc.) possono essere archiviati sul o letti dal dispositivo dell’utente per riconoscerlo ogni volta che l’utente si connette a un’app o a un sito web, per una o più finalità qui presentate.
Con il tuo consenso, i tuoi dati possono essere utilizzati per quanto segue: Pubblicità e contenuti personalizzati, misurazione delle prestazioni dei contenuti e degli annunci, ricerche sul pubblico, sviluppo di servizi; Dati di geolocalizzazione precisi e identificazione attraverso la scansione del dispositivo.
I tuoi dati personali verranno trattati e le informazioni dal tuo dispositivo (cookie, identificatori univoci e altri dati del dispositivo) possono essere memorizzate, consultate e condivise con 179 partner, o utilizzate specificamente da questo sito o questa app. Alcuni fornitori potrebbero trattare i tuoi dati personali sulla base dell'interesse legittimo, al quale puoi opporti gestendo le tue opzioni qui sotto. Puoi revocare il tuo consenso in qualsiasi momento facendo clic sul link delle impostazioni sulla privacy situato in fondo alla pagina.
Alcuni partner non chiedono il tuo consenso al trattamento dei tuoi dati, ma fanno affidamento sul loro legittimo interesse commerciale. Guarda il nostro elenco di partner per conoscere gli scopi per cui credono di avere un interesse legittimo e come puoi opporti.
Questi sono i nostri partner pubblicitari che partecipano al Framework di trasparenza e consenso dello IAB, creato per garantire un uso trasparente e corretto dei dati.
Questi fornitori sono registrati su Google, ma non nel Transparency & Consent Framework di IAB Europe.
{"b_dec":{"def":"Rifiuta e chiudi","res":"Rifiuta e chiudi"},"priclt":" \u003Cdiv class=\u0022cl-consent-settings cl-consent-settings--is-hidden\u0022\u003E \u003Cstyle\u003E .cl-consent-settings { position: fixed; left: 16px; bottom: 28px; z-index: 100; transition: all 0.15s ease-in-out; transform: translateY(0); } .cl-consent-settings--is-hidden { transform: translateY(70px); opacity: 0; } .cl-consent-settings__hint { border-radius: 4px; background: #282A3C; box-shadow: 0px 4px 24px 0px rgba(0, 0, 0, 0.15); color: #FFFCF2; position: absolute; right: -195px; top: 0; bottom: 0; margin: auto; height: 40px; width: 175px; display: flex; align-items: center; justify-content: center; padding: 4px 12px; font-size: 12px; font-weight: 400; line-height: 16px; cursor: default; user-select: none; transition: transform 0.3s ease, opacity 0.3s ease; transform: translateX(0); opacity: 0; pointer-events: none; z-index: -1; } .cl-consent-settings__hint::after { content: \u0022\u0022; position: absolute; left: -16px; top: 0; bottom: 0; margin: auto; width: 0; height: 0; border: 0 solid transparent; border-top-width: 12px; border-bottom-width: 12px; border-right: 16px solid #282A3C; } .cl-consent-settings__btn { width: 42px; height: 42px; border-radius: 50%; display: flex; align-items: center; justify-content: center; padding: 0; border: none; background-color: #4B81E8; background-image: url(\u0022data:image\/svg+xml,%3Csvg xmlns=\u0027http:\/\/www.w3.org\/2000\/svg\u0027 width=\u002730\u0027 height=\u002730\u0027 viewBox=\u00270 0 30 30\u0027 fill=\u0027none\u0027%3E%3Cpath fill=\u0027%23fff\u0027 d=\u0027M15 2.813C8.28 2.813 2.812 8.28 2.812 15S8.28 27.188 15 27.188c6.72 0 12.188-5.468 12.188-12.188C27.188 8.28 21.72 2.812 15 2.812Zm0 1.874c5.686 0 10.313 4.627 10.313 10.313 0 5.686-4.627 10.313-10.313 10.313-5.686 0-10.313-4.627-10.313-10.313C4.688 9.314 9.314 4.687 15 4.687Zm-1.875 3.75a.937.937 0 1 0 0 1.875.937.937 0 0 0 0-1.874Zm5.156.938a1.406 1.406 0 1 0 0 2.812 1.406 1.406 0 0 0 0-2.812Zm-7.968 2.813a1.875 1.875 0 1 0 0 3.749 1.875 1.875 0 0 0 0-3.75Zm5.624 1.874a.938.938 0 1 0 0 1.876.938.938 0 0 0 0-1.876Zm4.688.938a.938.938 0 1 0 0 1.875.938.938 0 0 0 0-1.875Zm-8.906 2.813a1.406 1.406 0 1 0 0 2.812 1.406 1.406 0 0 0 0-2.813Zm6.562.937a1.406 1.406 0 1 0 0 2.813 1.406 1.406 0 0 0 0-2.813Z\u0027\/%3E%3C\/svg%3E\u0022); background-position: center center; background-size: 30px 30px; background-repeat: no-repeat; box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.35); z-index: 70; position: relative; text-decoration: none; } .cl-consent-settings__btn:hover + .cl-consent-settings__hint { transform: translateX(22px); pointer-events: all; opacity: 1; } .cl-consent-settings__user { width: 18px; height: 18px; border-radius: 50%; padding: 0; border: 1px solid #ffffff; background-color: #00AD98; background-image: url(\u0022data:image\/svg+xml,%3Csvg xmlns=\u0027http:\/\/www.w3.org\/2000\/svg\u0027 viewBox=\u00270 0 10 11\u0027 width=\u002710\u0027 height=\u002711\u0027 fill=\u0027none\u0027%3E%3Cpath fill=\u0027%23fff\u0027 stroke=\u0027%23fff\u0027 stroke-width=\u0027.1\u0027 d=\u0027M6.858 6.262A3.3 3.3 0 0 0 8.2 3.597C8.2 1.796 6.764.325 5 .325s-3.2 1.47-3.2 3.272c0 1.094.53 2.07 1.342 2.665A4.67 4.67 0 0 0 .45 10.5v.05h1v-.05c0-2.012 1.585-3.632 3.55-3.632s3.55 1.62 3.55 3.632v.05h1v-.05a4.67 4.67 0 0 0-2.692-4.238ZM5 1.345c1.22 0 2.2 1.002 2.2 2.252s-.98 2.25-2.2 2.25-2.2-1-2.2-2.25.98-2.252 2.2-2.252Z\u0027\/%3E%3C\/svg%3E\u0022); background-position: center center; background-size: 9px 10px; background-repeat: no-repeat; z-index: 75; position: absolute; top: -2px; right: -8px; text-decoration: none; visibility: hidden; } \u003C\/style\u003E \u003Cbutton type=\u0022button\u0022 class=\u0022cl-consent-settings__btn\u0022 onclick=\u0022if(window.__lxG__consent__ !== undefined) {window.__lxG__consent__.showConsent()} else {alert(\u0027This function only for users from European Economic Area (EEA)\u0027)}; return false\u0022\u003E \u003Cspan class=\u0022cl-consent-settings__user\u0022\u003E\u003C\/span\u003E \u003C\/button\u003E \u003Cdiv class=\u0022cl-consent-settings__hint\u0022\u003EPrivacy and cookie settings\u003C\/div\u003E \u003C\/div\u003E","pricds":"show_in_the_footer","vcnt":179,"_t":{"titles":"Purposes|Purposes (Legitimate Interest)|Features|Special Features|Special Purposes|Scopi|Scopi (Interesse Legittimo)|Caratteristiche|Caratteristiche Speciali|Scopi Speciali","sp3_ret":"Le scelte che fai riguardo agli scopi e alle entità elencati in questo avviso sono salvate per un massimo di %sp3_retention% nei seguenti cookie e variabili di archiviazione locale","ill_pp_ttl":"Esempi di Utilizzo","vndr_dtls_con":"Trattamento dei dati basato sul tuo consenso","vndr_dtls_li":"Trattamento dei dati basato sul legittimo interesse","vndr_dtls_fi":"Trattamento dei dati basato sul tuo consenso o interesse legittimo","cks_strg_dur":"dura %DURATION%","cks_strg_ses":"per la sessione attuale","cks_strg_not_used":"non utilizzato","cks_strg_dur_s":"sec","cks_strg_dur_i":"min","cks_strg_dur_h":"ora(e)","cks_strg_dur_d":"giorno(i)","cks_strg_dur_m":"mese(i)","cks_strg_dur_y":"anno(i)","vr_dts_purl":"URL della politica sulla privacy","vr_dts_dsurl":"URL di divulgazione dell\u0027archiviazione del dispositivo","vr_dts_dsurl_h":"Informazioni aggiuntive su archiviazione e operazioni","vr_dts_clmurl":"URL della richiesta di interessi legittimi","vr_dts_datac":"Categorie di dati","vr_dts_datac_h":"Categorie di dati raccolti in relazione agli scopi","vr_dts_stdret":"Conservazione dei dati standard (giorni)","vr_dts_stdret_h":"Il periodo standard è utilizzato a meno che non sia dichiarato un altro periodo per scopi specifici.","vr_dts_ret":"Conservazione dei dati (giorni)","vr_dts_usecks":"Usa i cookie","vr_dts_usecks_h":"Indica se il fornitore utilizza l\u0027archiviazione dei cookie (sessione o altro). SÌ indica che l\u0027archiviazione dei cookie è utilizzata. NO - l\u0027archiviazione dei cookie non è utilizzata.","vr_dts_usecksy":"Sì","vr_dts_usecksn":"No","vr_dts_cksage":"Età massima del cookie","vr_dts_cksage_h":"Il numero di secondi che rappresenta la durata potenziale più lunga per l\u0027archiviazione dei cookie su un dispositivo. Se un fornitore utilizza più cookie con durate diverse, rappresenta il cookie con la durata più lunga. Un numero negativo o 0 indica l\u0027archiviazione della sessione simile alla specifica Set-Cookie.","vr_dts_cksref":"Aggiornamento cookie","vr_dts_cksref_h":"Indica se i cookie vengono aggiornati dopo essere stati inizialmente impostati. SÌ - indica che il fornitore può aggiornare i cookie. NO - indica che il fornitore non aggiorna i cookie ogni volta che il browser viene ricaricato.","vr_dts_noncks":"Utilizza l\u0027accesso senza cookie","vr_dts_noncks_h":"Indica l\u0027uso da parte del fornitore di archiviazione non-cookie e accesso alle informazioni già memorizzate sul dispositivo di un utente. SÌ - indica che l\u0027accesso senza cookie è utilizzato. NO - indica che l\u0027archiviazione e l\u0027accesso senza cookie alle informazioni già memorizzate sul dispositivo di un utente non vengono utilizzati.","vr_dts_hgetl":"Limite della lunghezza della richiesta HTTP GET (Kbyte)","vr_dts_hgetl_h":"Dimensione massima della richiesta GET in kilobyte per aiutare a diagnosticare i problemi con il passaggio della stringa TC e limitare le stringhe di dimensioni eccessive.","vr_dts_addtnl":"Dati aggiuntivi","vr_dts_legaddr":"Indirizzo completo dell\u0027entità legale","vr_dts_b2bcont":"Dettagli di contatto B2B","vr_dts_terscp":"Ambito territoriale","vr_dts_terscp_h":"Indica le giurisdizioni UE\/SEE\/UK in cui il fornitore opera con TCF. Nota che questo è diverso dalla sede del fornitore.","vr_dts_env":"Ambiente","vr_dts_env_h":"Indica gli ambienti in cui il venditore opera","vr_dts_tserv":"Tipo di servizi","vr_dts_tserv_h":"Indica il tipo di servizi offerti dal venditore","vr_dts_trnsfout":"Trasferimenti internazionali fuori dall\u0027UE\/SEE","vr_dts_trnsfout_h":"Indica le giurisdizioni UE\/SEE\/UK in cui il fornitore opera con TCF. Nota che questo è diverso dalla sede del fornitore.","vr_dts_trnsfmch":"Meccanismi di trasferimento internazionale"}}