{"id":61705,"date":"2022-11-08T09:51:37","date_gmt":"2022-11-08T08:51:37","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=61705&#038;preview=true&#038;preview_id=61705"},"modified":"2023-06-14T16:37:13","modified_gmt":"2023-06-14T15:37:13","slug":"creare-database-mongodb","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/","title":{"rendered":"Come Creare un Database MongoDB: 6 Aspetti da Conoscere"},"content":{"rendered":"<p>In base alle esigenze del vostro software, potreste dare priorit\u00e0 alla flessibilit\u00e0, alla scalabilit\u00e0, alle prestazioni o alla velocit\u00e0. Per questo motivo, developer e aziende sono spesso confusi nella scelta di un database per le loro esigenze. Se avete bisogno di un database che garantisca un&#8217;elevata flessibilit\u00e0 e scalabilit\u00e0, nonch\u00e9 l&#8217;aggregazione dei dati per l&#8217;analisi dei clienti, MongoDB potrebbe fare al caso vostro!<\/p>\n<p><br \/>\nIn questo articolo parleremo della struttura del database MongoDB e di come creare, monitorare e gestire il vostro database! Iniziamo.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Come \u00c8 Strutturato un Database MongoDB?<\/h2>\n<p>MongoDB \u00e8 un database NoSQL senza schema. Ci\u00f2 significa che non \u00e8 necessario specificare una struttura per le tabelle\/database come avviene per i database SQL.<\/p>\n<p>Sapevate che i database NoSQL sono pi\u00f9 veloci dei database <a href=\"https:\/\/kinsta.com\/it\/blog\/mongodb-vs-mysql\/\">relazionali<\/a>? Ci\u00f2 \u00e8 dovuto a caratteristiche come l&#8217;indicizzazione, lo sharding e le pipeline di aggregazione. MongoDB \u00e8 noto anche per la velocit\u00e0 di esecuzione delle query. Per questo motivo \u00e8 preferito da aziende come Google, Toyota e Forbes.<\/p>\n<p>Di seguito analizzeremo alcune caratteristiche chiave di MongoDB.<\/p>\n<h3>I Documenti<\/h3>\n<p>MongoDB ha un modello di dati documentale che memorizza i dati come documenti JSON. I documenti corrispondono naturalmente agli oggetti del codice dell&#8217;applicazione, rendendo pi\u00f9 semplice l&#8217;utilizzo da parte di sviluppatrici e sviluppatori.<\/p>\n<p>In una tabella di un database relazionale, per aggiungere un nuovo campo dovete aggiungere una colonna. Questo non \u00e8 il caso dei campi di un documento JSON. I campi di un documento JSON possono variare da un documento all&#8217;altro, quindi non saranno aggiunti a tutti i record del database.<\/p>\n<p>I documenti possono memorizzare strutture come gli array che possono essere annidati per esprimere relazioni gerarchiche. Inoltre, MongoDB converte i documenti in un tipo binario JSON (BSON). Questo garantisce un accesso pi\u00f9 rapido e un maggiore supporto per vari tipi di dati come stringhe, numeri interi, numeri booleani e molto altro ancora!<\/p>\n<h3>Set di Repliche<\/h3>\n<p>Quando create un nuovo database in MongoDB, il sistema crea automaticamente almeno altre due copie dei vostri dati. Queste copie sono note come &#8220;set di replica&#8221; e replicano continuamente i dati tra loro, garantendo una maggiore disponibilit\u00e0 dei vostri dati. Inoltre, offrono una protezione contro i tempi di inattivit\u00e0 durante un guasto del sistema o una manutenzione programmata.<\/p>\n<h3>Collezioni<\/h3>\n<p>Una collezione \u00e8 un gruppo di documenti associati a un database. Sono simili alle tabelle dei database relazionali.<\/p>\n<p>Le collezioni, tuttavia, sono molto pi\u00f9 flessibili. Innanzitutto, non dipendono da uno schema. In secondo luogo, non \u00e8 necessario che i documenti abbiano lo stesso tipo di dati!<\/p>\n<p>Per visualizzare un elenco delle collezioni che appartengono a un database, usate il comando <code>listCollections<\/code>.<\/p>\n<h3>Pipeline di Aggregazione<\/h3>\n<p>Potete usare questo framework per raggruppare diversi operatori ed espressioni. \u00c8 flessibile perch\u00e9 vi permette di elaborare, trasformare e analizzare dati di qualsiasi struttura.<\/p>\n<p>Per questo motivo, MongoDB consente flussi di dati veloci e funzioni con 150 operatori ed espressioni. Ha anche diversi stadi, come lo stadio Union, che mette insieme in modo flessibile i risultati di pi\u00f9 collezioni.<\/p>\n<h3>Indici<\/h3>\n<p>Potete indicizzare qualsiasi campo di un documento MongoDB per aumentarne l&#8217;efficienza e migliorare la velocit\u00e0 delle query. L&#8217;indicizzazione consente di risparmiare tempo grazie alla scansione dell&#8217;indice per limitare i documenti ispezionati. Non \u00e8 molto meglio che leggere tutti i documenti della collezione?<\/p>\n<p>Potete usare diverse strategie di indicizzazione, compresi gli indici composti su pi\u00f9 campi. Per esempio, \u00e8 utile se avete diversi documenti che contengono il nome e il cognome del dipendente in campi separati. Se volete che vengano restituiti il nome e il cognome, potete creare un indice che includa sia &#8220;Cognome&#8221; che &#8220;Nome&#8221;; molto meglio rispetto ad avere un indice su &#8220;Cognome&#8221; e un altro su &#8220;Nome&#8221;.<\/p>\n<p>Potete usare strumenti come Performance Advisor per capire meglio quali query potrebbero trarre vantaggio dagli indici.<\/p>\n<h3>Sharding<\/h3>\n<p>Lo sharding distribuisce un singolo set di dati su pi\u00f9 database. Questo set di dati pu\u00f2 essere archiviato su pi\u00f9 macchine per aumentare la capacit\u00e0 di archiviazione totale di un sistema. Questo perch\u00e9 divide i dataset pi\u00f9 grandi in pezzi pi\u00f9 piccoli e li archivia in diversi nodi di dati.<\/p>\n<p>MongoDB suddivide i dati a livello di collezione, distribuendo i documenti di una collezione tra gli shard di un cluster. Questo garantisce la scalabilit\u00e0, consentendo all&#8217;architettura di gestire le applicazioni pi\u00f9 grandi.<\/p>\n<h2>Come Creare un Database MongoDB<\/h2>\n<p>Per prima cosa dovete installare il pacchetto MongoDB adatto al vostro sistema operativo. Andate alla pagina &#8220;<a href=\"https:\/\/www.mongodb.com\/try\/download\/community\">MongoDB Community Server Download<\/a>&#8220;. Tra le opzioni disponibili, selezionate l&#8217;ultima &#8220;versione&#8221;, il formato del &#8220;pacchetto&#8221; come file zip e la &#8220;piattaforma&#8221; come il vostro sistema operativo e clicca su &#8220;Download&#8221; come illustrato di seguito:<\/p>\n<figure id=\"attachment_134838\" aria-describedby=\"caption-attachment-134838\" style=\"width: 594px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134838 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/MongoDB-Community-Server-Download-Process-1.png\" alt=\"Schermata della pagina di MongoDB con le opzioni disponibili: Version, Platform e Package durante il download di MongoDB Community Server.\" width=\"594\" height=\"814\"><figcaption id=\"caption-attachment-134838\" class=\"wp-caption-text\">Processo di download del server comunitario MongoDB. (Fonte: <a href=\"https:\/\/www.mongodb.com\/try\/download\/community2\">MongoDB Community Server<\/a>)<\/figcaption><\/figure>\n<p>Il processo \u00e8 abbastanza semplice, quindi avrete MongoDB installato nel vostro sistema in pochissimo tempo!<\/p>\n<p>Una volta terminata l&#8217;installazione, aprite il prompt dei comandi e digitate <code>mongod -version<\/code> per verificarla. Se non ottenete il seguente risultato e vedete invece una serie di errori, forse dovrete reinstallare il sistema:<\/p>\n<figure id=\"attachment_134839\" aria-describedby=\"caption-attachment-134839\" style=\"width: 507px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134839 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Verifying-MongoDB-Version.png\" alt=\"Lo snippet di codice per verificare la versione di MongoDB dopo l'installazione.\" width=\"507\" height=\"287\"><figcaption id=\"caption-attachment-134839\" class=\"wp-caption-text\">Verifica della versione di MongoDB. (Fonte immagine: <a href=\"https:\/\/www.configserverfirewall.com\/mongodb\/check-mongodb-version\/\">configserverfirewall<\/a>)<\/figcaption><\/figure>\n<h3>Usare la Shell di MongoDB<\/h3>\n<p>Prima di iniziare, verificate che:<\/p>\n<ul>\n<li>Il vostro client sia dotato di Transport Layer Security e si trova nella vostra <a href=\"https:\/\/docs.atlas.mongodb.com\/security\/ip-access-list\/\">lista di IP consentiti<\/a>.<\/li>\n<li>Avete un account utente e una password sul cluster MongoDB desiderato.<\/li>\n<li>Avete installato MongoDB sul vostro dispositivo.<\/li>\n<\/ul>\n<h4>Passo 1: Accedere alla Shell di MongoDB<\/h4>\n<p>Avviate il server MongoDB seguendo le istruzioni del vostro sistema operativo. Per Windows, digitate il seguente comando. Per gli altri sistemi operativi, consultate la documentazione di MongoDB.<\/p>\n<pre><code class=\"language-markdown\">net start MongoDB<\/code><\/pre>\n<p>Questo dovrebbe dare il seguente risultato:<\/p>\n<figure id=\"attachment_134840\" aria-describedby=\"caption-attachment-134840\" style=\"width: 512px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134840 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/MongoDB-Server-Initialization.png\" alt=\"Esecuzione del server MongoDB\" width=\"512\" height=\"179\"><figcaption id=\"caption-attachment-134840\" class=\"wp-caption-text\">Esecuzione del server MongoDB (fonte immagine: <a href=\"https:\/\/www.c-sharpcorner.com\/article\/configure-a-windows-service-for-mongodb\/\">c-sharpcorner<\/a>)<\/figcaption><\/figure>\n<p>Il comando precedente ha inizializzato il server MongoDB. Per eseguirlo, dovremo digitare <code>mongo<\/code> nel prompt dei comandi.<\/p>\n<figure id=\"attachment_134843\" aria-describedby=\"caption-attachment-134843\" style=\"width: 897px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134843 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Running-MongoDB-Server-2.png\" alt=\"Esecuzione della shell di MongoDB.\" width=\"897\" height=\"343\"><figcaption id=\"caption-attachment-134843\" class=\"wp-caption-text\">Esecuzione della shell di MongoDB. (fonte immagine: <a href=\"https:\/\/www.bmc.com\/blogs\/mongodb-create-database\/\">bmc<\/a>)<\/figcaption><\/figure>\n<p>Nella shell di MongoDB possiamo eseguire comandi per creare database, inserire dati, modificare dati, impartire comandi amministrativi e cancellare dati.<\/p>\n<h4>Passo 2: Creare il Database<\/h4>\n<p>A differenza dei comuni database relazionali, MongoDB non ha un comando di creazione del database. Esiste invece una parola chiave chiamata <code>use<\/code> che permette di passare a un database specificato. Se il database non esiste, ne crea uno nuovo, altrimenti si collega al database esistente.<\/p>\n<p>Per esempio, per avviare un database chiamato &#8220;azienda&#8221;, digitate:<\/p>\n<pre><code class=\"language-markdown\">use Company<\/code><\/pre>\n<figure id=\"attachment_134845\" aria-describedby=\"caption-attachment-134845\" style=\"width: 1378px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-134845\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Creating-Database-in-MongoDB-1.png\" alt=\"Frammento di codice per creare un database in MongoDB.\" width=\"1378\" height=\"547\"><figcaption id=\"caption-attachment-134845\" class=\"wp-caption-text\">Creare un database in MongoDB.<\/figcaption><\/figure>\n<p>Potete digitare <code>db<\/code> per confermare il database appena creato nel vostro sistema. Se il nuovo database creato viene visualizzato, la connessione \u00e8 avvenuta con successo.<\/p>\n<p>Se volete controllare i database esistenti, digitate <code>show dbs<\/code> e vi verranno mostrati tutti i database presenti nel vostro sistema:<\/p>\n<figure id=\"attachment_134847\" aria-describedby=\"caption-attachment-134847\" style=\"width: 1369px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-134847\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Show-Databases-in-MongoDB-1.png\" alt=\"Frammento di codice per visualizzare i database esistenti nel server MongoDB.\" width=\"1369\" height=\"489\"><figcaption id=\"caption-attachment-134847\" class=\"wp-caption-text\">Visualizzazione dei database in MongoDB.<\/figcaption><\/figure>\n<p>Per impostazione predefinita, l&#8217;installazione di MongoDB crea i database admin, config e local.<\/p>\n<p>Avete notato che il database che abbiamo creato non viene visualizzato? Questo perch\u00e9 non abbiamo ancora salvato i valori nel database! Parleremo dell&#8217;inserimento nella sezione dedicata alla gestione dei database.<\/p>\n<h3>Usare l&#8217;Interfaccia Utente di Atlas<\/h3>\n<p>Potete anche iniziare a usare il servizio di database di MongoDB, Atlas. Sebbene sia necessario pagare per accedere ad alcune caratteristiche di Atlas, la maggior parte delle funzionalit\u00e0 del database sono disponibili con il livello gratuito. Le funzionalit\u00e0 del livello gratuito sono pi\u00f9 che sufficienti per creare un database MongoDB.<\/p>\n<p>Prima di iniziare, verificate che:<\/p>\n<ol>\n<li>Il vostro IP sia presente nella allowlist.<\/li>\n<li>Avete un account utente e una password sul cluster MongoDB che volete utilizzare.<\/li>\n<\/ol>\n<p>Per creare un database MongoDB con AtlasUI, aprite una finestra del browser e accedete a <a href=\"https:\/\/cloud.mongodb.com\/\">https:\/\/cloud.mongodb.com<\/a>. Dalla pagina del vostro cluster, fate clic su <strong>Browse Collections<\/strong>. Se non ci sono database nel cluster, potete creare il vostro database facendo clic sul pulsante <strong>Add My Own Data<\/strong>.<\/p>\n<p>Il prompt vi chieder\u00e0 di indicare il nome del database e della collezione. Dopo averli nominati, fate clic su <strong>Create<\/strong> e il gioco \u00e8 fatto! Ora potete inserire nuovi documenti o connettervi al database utilizzando i driver.<\/p>\n<h2>Gestire il Database MongoDB<\/h2>\n<p>In questa sezione vi illustreremo alcuni modi interessanti per gestire efficacemente il vostro database MongoDB. Potete farlo usando il Compass di MongoDB o attraverso le collezioni.<\/p>\n<h3>Usare le Collezioni<\/h3>\n<p>Mentre i database relazionali possiedono tabelle ben definite con tipi di dati e colonne specifiche, i NoSQL hanno collezioni al posto delle tabelle. Queste collezioni non hanno alcuna struttura e i documenti possono variare: potete avere diversi tipi di dati e campi senza necessit\u00e0 di rimanere legati al formato di un altro documento nella stessa collezione.<\/p>\n<p>Per dimostrarlo, creiamo una collezione chiamata &#8220;Employee&#8221; e aggiungiamole un documento essa:<\/p>\n<pre><code class=\"language-markdown\">db.Employee.insert(\n  {\n       \"Employeename\" : \"Chris\",\n       \"EmployeeDepartment\" : \"Sales\"\n  }\n)<\/code><\/pre>\n<p>Se l&#8217;inserimento va a buon fine, verr\u00e0 restituito <code>WriteResult({ \"nInserted\" : 1 })<\/code>:<\/p>\n<figure id=\"attachment_134848\" aria-describedby=\"caption-attachment-134848\" style=\"width: 1366px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-134848\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Successful-Insertion-in-MongoDB.png\" alt=\"Questo codice restituisce WriteResult({ \" width=\"1366\" height=\"484\"><figcaption id=\"caption-attachment-134848\" class=\"wp-caption-text\">Inserimento riuscito in MongoDB.<\/figcaption><\/figure>\n<p>In questo caso, &#8220;db&#8221; si riferisce al database attualmente collegato. &#8220;Employee&#8221; \u00e8 la collezione appena creata nel database aziendale.<\/p>\n<p>Non abbiamo impostato una chiave primaria perch\u00e9 MongoDB crea automaticamente un campo chiave primaria chiamato &#8220;_id&#8221; e gli assegna un valore predefinito.<\/p>\n<p>Eseguite il comando seguente per verificare la collezione in formato JSON:<\/p>\n<pre><code class=\"language-markdown\">db.Employee.find().forEach(printjson)<\/code><\/pre>\n<p>Output:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"_id\" : ObjectId(\"63151427a4dd187757d135b8\"),\n  \"Employeename\" : \"Chris\",\n  \"EmployeeDepartment\" : \"Sales\"\n}<\/code><\/pre>\n<p>Mentre il valore &#8220;_id&#8221; viene assegnato automaticamente, potete modificare il valore della chiave primaria predefinita. Questa volta inseriremo un altro documento nel database &#8220;Employee&#8221; con il valore &#8220;_id&#8221; pari a &#8220;1&#8221;:<\/p>\n<pre><code class=\"language-markdown\">db.Employee.insert(\n  {  \n       \"_id\" : 1,\n       \"EmployeeName\" : \"Ava\",\n       \"EmployeeDepartment\" : \"Public Relations\"\n  }\n)<\/code><\/pre>\n<p>Eseguendo il comando <code>db.Employee.find().forEach(printjson)<\/code> otterremo il seguente risultato:<\/p>\n<figure id=\"attachment_134851\" aria-describedby=\"caption-attachment-134851\" style=\"width: 1764px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-134851\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/Primary-Key-for-Documents-in-Collection-1.png\" alt=\"L'output mostra i documenti della raccolta Employee insieme alla loro chiave primaria\" width=\"1764\" height=\"694\"><figcaption id=\"caption-attachment-134851\" class=\"wp-caption-text\">Documenti nella collezione con la loro chiave primaria.<\/figcaption><\/figure>\n<p>Nell&#8217;output qui sopra, il valore &#8220;_id&#8221; di &#8220;Ava&#8221; \u00e8 impostato su &#8220;1&#8221; invece di essere assegnato automaticamente.<\/p>\n<p>Ora che abbiamo aggiunto con successo dei valori al database, possiamo verificare se questo viene visualizzato tra i database esistenti nel nostro sistema utilizzando il seguente comando:<\/p>\n<pre><code class=\"language-markdown\">show dbs<\/code><\/pre>\n<figure id=\"attachment_134852\" aria-describedby=\"caption-attachment-134852\" style=\"width: 1714px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-134852\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/List-of-Databases.png\" alt=\"L'output mostra la collezione Employee nei database esistenti nel nostro sistema..\" width=\"1714\" height=\"460\"><figcaption id=\"caption-attachment-134852\" class=\"wp-caption-text\">Visualizzazione dell&#8217;elenco dei database.<\/figcaption><\/figure>\n<p>E voil\u00e0! Avete creato con successo un database nel vostro sistema!<\/p>\n<h3>Usare la Bussola di MongoDB<\/h3>\n<p>Anche se possiamo lavorare con i server MongoDB dalla shell Mongo, a volte pu\u00f2 essere noioso. Potreste riscontrare questa situazione in un ambiente di produzione.<\/p>\n<p>Tuttavia, esiste uno strumento che funge da bussola (e infatti \u00e8 chiamato Compass) creato da MongoDB che pu\u00f2 semplificare le cose. Ha un&#8217;interfaccia grafica migliore e funzionalit\u00e0 aggiuntive come la visualizzazione dei dati, la profilazione delle prestazioni e l&#8217;accesso CRUD (acronimo di Create, Read, Update, Delete, cio\u00e8 creazione, lettura, aggiornamento, cancellazione) ai dati, ai database e alle collezioni.<\/p>\n<p>Potete scaricare <a href=\"https:\/\/www.mongodb.com\/docs\/compass\/current\/install\/\">Compass IDE<\/a> per il vostro sistema operativo e installarlo con un processo semplice.<\/p>\n<p>Successivamente, aprite l&#8217;applicazione e create una connessione con il server incollando la stringa di connessione. Se non riuscite a trovarla, potete fare clic su <strong>Fill in connection fields individually<\/strong>. Se non avete modificato il numero di porta durante l&#8217;installazione di MongoDB, fate clic sul pulsante di connessione e il gioco \u00e8 fatto! In caso contrario, inserite i valori impostati e fate clic su <strong>Connect<\/strong>.<\/p>\n<figure id=\"attachment_134854\" aria-describedby=\"caption-attachment-134854\" style=\"width: 1384px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134854 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/New-Connection-Window-in-MongoDB-1.png\" alt=\"Questa immagine mostra la finestra New Connection, dove si pu\u00f2 scegliere di incollare l'url della connessione.\" width=\"1384\" height=\"535\"><figcaption id=\"caption-attachment-134854\" class=\"wp-caption-text\">Finestra Nuova Connessione in MongoDB&#8230; (Fonte immagine: <a href=\"https:\/\/www.mongodb.com\/docs\/compass\/current\/connect\/\">mongodb<\/a>)<\/figcaption><\/figure>\n<p>Quindi fornite il nome dell&#8217;host, la porta e l&#8217;autenticazione nella finestra New Connection.<\/p>\n<p>In MongoDB Compass, potete creare un database e aggiungere contemporaneamente la sua prima collezione. Ecco come fare:<\/p>\n<ol>\n<li>Fate clic su <strong>Create database<\/strong> per aprire il prompt.<\/li>\n<li>Inserite il nome del database e la sua prima collezione.<\/li>\n<li>Fate clic su <strong>Create database<\/strong>.<\/li>\n<\/ol>\n<p>Potete inserire altri documenti nel vostro database facendo clic sul nome del database e poi sul nome della collezione per visualizzare la scheda <strong>Documents<\/strong>. Potete quindi fare clic sul pulsante <strong>Add Data<\/strong> per inserire uno o pi\u00f9 documenti nella vostra collezione.<\/p>\n<p>Durante l&#8217;aggiunta dei documenti, potete inserirli uno alla volta o come documenti multipli in un array. Se state aggiungendo pi\u00f9 documenti, verificate che questi documenti separati da virgole siano racchiusi tra parentesi quadre. Per esempio:<\/p>\n<pre><code class=\"language-markdown\">{ _id: 1, item: { name: \"apple\", code: \"123\" }, qty: 15, tags: [ \"A\", \"B\", \"C\" ] },\n{ _id: 2, item: { name: \"banana\", code: \"123\" }, qty: 20, tags: [ \"B\" ] },\n{ _id: 3, item: { name: \"spinach\", code: \"456\" }, qty: 25, tags: [ \"A\", \"B\" ] },\n{ _id: 4, item: { name: \"lentils\", code: \"456\" }, qty: 30, tags: [ \"B\", \"A\" ] },\n{ _id: 5, item: { name: \"pears\", code: \"000\" }, qty: 20, tags: [ [ \"A\", \"B\" ], \"C\" ] },\n{ _id: 6, item: { name: \"strawberry\", code: \"123\" }, tags: [ \"B\" ] }<\/code><\/pre>\n<p>Infine, fate clic su <strong>Insert<\/strong> per aggiungere i documenti alla vostra collezione. Ecco come appare il corpo di un documento:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"StudentID\" : 1\n  \"StudentName\" : \"JohnDoe\"\n}<\/code><\/pre>\n<p>Qui i nomi dei campi sono &#8220;StudentID&#8221; e &#8220;StudentName&#8221;. I valori dei campi sono rispettivamente &#8220;1&#8221; e &#8220;JohnDoe&#8221;.<\/p>\n<h3>Comandi Utili<\/h3>\n<p>Potete gestire queste collezioni attraverso i comandi di gestione dei ruoli e degli utenti.<\/p>\n<h4>Comandi per la Gestione degli Utenti<\/h4>\n<p>I comandi di gestione degli utenti di MongoDB contengono i comandi che riguardano gli utenti. Possiamo creare, aggiornare e cancellare gli utenti utilizzando questi comandi.<\/p>\n<h5>dropUser<\/h5>\n<p>Questo comando rimuove un singolo utente dal database specificato. La sintassi \u00e8 la seguente:<\/p>\n<pre><code class=\"language-markdown\">db.dropUser(username, writeConcern)<\/code><\/pre>\n<p>Qui, <code>username<\/code> \u00e8 un campo obbligatorio che specifica il nome dell&#8217;utente da rimuovere dal database. Il campo opzionale <code>writeConcern<\/code> contiene il livello di preoccupazione per la scrittura dell&#8217;operazione di rimozione. Il livello di preoccupazione per la scrittura pu\u00f2 essere determinato dal campo opzionale <code>writeConcern<\/code>.<\/p>\n<p>Prima di eliminare un utente con il ruolo <code>userAdminAnyDatabase<\/code>, verificate che ci sia almeno un altro utente con i privilegi di amministrazione.<\/p>\n<p>In questo esempio, elimineremo l&#8217;utente &#8220;user26&#8221; nel database di prova:<\/p>\n<pre><code class=\"language-markdown\">use test\ndb.dropUser(\"user26\", {w: \"majority\", wtimeout: 4000})<\/code><\/pre>\n<p>Output:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.dropUser(\"user26\", {w: \"majority\", wtimeout: 4000});\ntrue<\/code><\/pre>\n<h5>createUser<\/h5>\n<p>Questo comando crea un nuovo utente per il database specificato come segue:<\/p>\n<pre><code class=\"language-markdown\">db.createUser(user, writeConcern)<\/code><\/pre>\n<p>Qui, <code>user<\/code> \u00e8 un campo obbligatorio che contiene il documento con le informazioni di autenticazione e di accesso dell&#8217;utente da creare. Il campo facoltativo <code>writeConcern<\/code> contiene il livello di criticit\u00e0 di scrittura per l&#8217;operazione di creazione. Il livello di preoccupazione per la scrittura pu\u00f2 essere determinato dal campo opzionale <code>writeConcern<\/code>.<\/p>\n<p><code>createUser<\/code> restituir\u00e0 un errore di utente duplicato se l&#8217;utente esiste gi\u00e0 nel database.<\/p>\n<p>Potete creare un nuovo utente nel database di prova come segue:<\/p>\n<pre><code class=\"language-markdown\">use test\ndb.createUser(\n  {\n    user: \"user26\",\n    pwd: \"myuser123\",\n    roles: [ \"readWrite\" ]  \n  }\n);<\/code><\/pre>\n<p>L&#8217;output \u00e8 il seguente:<\/p>\n<pre><code class=\"language-markdown\">Successfully added user: { \"user\" : \"user26\", \"roles\" : [ \"readWrite\", \"dbAdmin\" ] }<\/code><\/pre>\n<h5>grantRolesToUser<\/h5>\n<p>Potete usare questo comando per assegnare ruoli aggiuntivi a un utente. Per usarlo, dovete tenere a mente la seguente sintassi:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    grantRolesToUser: \"&lt;user&gt;\",\n    roles: [ &lt;roles&gt; ],\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt;\n  }\n)<\/code><\/pre>\n<p>Potete specificare sia i ruoli definiti dall&#8217;utente che quelli integrati nei ruoli sopra citati. Se volete specificare un ruolo che esiste nello stesso database in cui viene eseguito <code>grantRolesToUser<\/code>, potete specificare il ruolo con un documento, come indicato di seguito:<\/p>\n<pre><code class=\"language-markdown\">{ role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" }<\/code><\/pre>\n<p>Oppure potete semplicemente specificare il ruolo con il suo nome. Per esempio:<\/p>\n<pre><code class=\"language-markdown\">\"readWrite\"<\/code><\/pre>\n<p>Se volete specificare il ruolo presente in un altro database, dovrete specificare il ruolo con un documento diverso.<\/p>\n<p>Per assegnare un ruolo a un database, \u00e8 necessaria l&#8217;azione <code>grantRole<\/code> sul database specificato.<\/p>\n<p>Ecco un esempio per farvii un&#8217;idea chiara. Prendiamo un utente productUser00 nel database dei prodotti con i seguenti ruoli:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"assetsWriter\",\n    \"db\" : \"assets\"\n  }\n]<\/code><\/pre>\n<p>L&#8217;operazione <code>grantRolesToUser<\/code> fornisce a &#8220;productUser00&#8221; il ruolo <code>readWrite<\/code> nel database delle scorte e il ruolo di lettura nel database dei prodotti:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand({\n  grantRolesToUser: \"productUser00\",\n  roles: [\n    { role: \"readWrite\", db: \"stock\"},\n    \"read\"\n  ],\n  writeConcern: { w: \"majority\" , wtimeout: 2000 }\n})<\/code><\/pre>\n<p>L&#8217;utente productUser00 nel database dei prodotti possiede ora i seguenti ruoli:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"assetsWriter\",\n    \"db\" : \"assets\"\n  },\n  {\n    \"role\" : \"readWrite\",\n    \"db\" : \"stock\"\n  },\n  {\n    \"role\" : \"read\",\n    \"db\" : \"products\"\n  }\n]<\/code><\/pre>\n<h5>usersInfo<\/h5>\n<p>Potete usare il comando <code>usersInfo<\/code> per ottenere informazioni su uno o pi\u00f9 utenti. Ecco la sintassi:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    usersInfo: &lt;various&gt;,\n    showCredentials: &lt;Boolean&gt;,\n    showCustomData: &lt;Boolean&gt;,\n    showPrivileges: &lt;Boolean&gt;,\n    showAuthenticationRestrictions: &lt;Boolean&gt;,\n    filter: &lt;document&gt;,\n    comment: &lt;any&gt;\n  }\n)\n{ usersInfo: &lt;various&gt; }<\/code><\/pre>\n<p>In termini di accesso, gli utenti possono sempre consultare le proprie informazioni. Per consultare le informazioni di un altro utente, l&#8217;utente che esegue il comando deve avere i privilegi che includono l&#8217;azione <code>viewUser<\/code> sul database dell&#8217;altro utente.<\/p>\n<p>Eseguendo il comando <code>userInfo<\/code>, potete ottenere le seguenti informazioni a seconda delle opzioni specificate:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"users\" : [\n    {\n      \"_id\" : \"&lt;db&gt;.&lt;username&gt;\",\n      \"userId\" : &lt;UUID&gt;, \/\/ Starting in MongoDB 4.0.9\n      \"user\" : \"&lt;username&gt;\",\n      \"db\" : \"&lt;db&gt;\",\n      \"mechanisms\" : [ ... ],  \/\/ Starting in MongoDB 4.0\n      \"customData\" : &lt;document&gt;,\n      \"roles\" : [ ... ],\n      \"credentials\": { ... }, \/\/ only if showCredentials: true\n      \"inheritedRoles\" : [ ... ],  \/\/ only if showPrivileges: true or showAuthenticationRestrictions: true\n      \"inheritedPrivileges\" : [ ... ], \/\/ only if showPrivileges: true or showAuthenticationRestrictions: true\n      \"inheritedAuthenticationRestrictions\" : [ ] \/\/ only if showPrivileges: true or showAuthenticationRestrictions: true\n      \"authenticationRestrictions\" : [ ... ] \/\/ only if showAuthenticationRestrictions: true\n    },\n  ],\n  \"ok\" : 1\n} <\/code><\/pre>\n<p>Ora che avete un&#8217;idea generale di ci\u00f2 che potete ottenere con il comando <code>usersInfo<\/code>, la domanda pi\u00f9 ovvia che potrebbe sorgere \u00e8: quali sono i comandi utili per controllare utenti specifici o pi\u00f9 utenti?<\/p>\n<p>Ecco due esempi pratici per illustrare la stessa cosa:<br \/>\nPer visualizzare i privilegi e le informazioni specifiche di un utente, ma non le credenziali, per un utente &#8220;Anthony&#8221; definito nel database &#8220;office&#8221;, eseguite il seguente comando:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    usersInfo:  { user: \"Anthony\", db: \"office\" },\n    showPrivileges: true\n  }\n)<\/code><\/pre>\n<p>Se volete visualizzare un utente nel database corrente, potete solo citare l&#8217;utente per nome. Per esempio, se vi trovate nel database home e nel database home esiste un utente chiamato &#8220;Timothy&#8221;, potete eseguire il seguente comando:<\/p>\n<pre><code class=\"language-markdown\">db.getSiblingDB(\"home\").runCommand(\n  {\n    usersInfo:  \"Timothy\",\n    showPrivileges: true\n  }\n)<\/code><\/pre>\n<p>Inoltre, potete usare un array se volete visualizzare le informazioni di diversi utenti. Potete includere i campi opzionali <code>showCredentials<\/code> e <code>showPrivileges<\/code>, oppure scegliere di non includerli. Ecco come si presenterebbe il comando:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand({\nusersInfo: [ { user: \"Anthony\", db: \"office\" }, { user: \"Timothy\", db: \"home\" } ],\n  showPrivileges: true\n})<\/code><\/pre>\n<h5>revokeRolesFromUser<\/h5>\n<p>Potete usare il comando <code>revokeRolesFromUser<\/code> per rimuovere uno o pi\u00f9 ruoli da un utente nel database in cui sono presenti i ruoli. Il comando <code>revokeRolesFromUser<\/code> ha la seguente sintassi:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    revokeRolesFromUser: \"&lt;user&gt;\",\n    roles: [\n      { role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" } | \"&lt;role&gt;\",\n    ],\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt;\n  }\n)<\/code><\/pre>\n<p>Nella sintassi sopra citata, potete specificare sia i ruoli definiti dall&#8217;utente che quelli incorporati nel campo <code>roles<\/code>. Analogamente al comando <code>grantRolesToUser<\/code>, potete specificare il ruolo che volete revocare in un documento o usare il suo nome.<\/p>\n<p>Per eseguire correttamente il comando <code>revokeRolesFromUser<\/code>, dovete avere l&#8217;azione <code>revokeRole<\/code> sul database specificato.<\/p>\n<p>Ecco un esempio per chiarire il concetto. L&#8217;entit\u00e0 <code>productUser00<\/code> nel database dei prodotti aveva i seguenti ruoli:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"assetsWriter\",\n    \"db\" : \"assets\"\n  },\n  {\n    \"role\" : \"readWrite\",\n    \"db\" : \"stock\"\n  },\n  {\n    \"role\" : \"read\",\n    \"db\" : \"products\"\n  }\n]<\/code><\/pre>\n<p>Il seguente comando <code>revokeRolesFromUser<\/code> rimuover\u00e0 due ruoli dell&#8217;utente: il ruolo &#8220;read&#8221; da <code>products<\/code> e il ruolo <code>assetsWriter<\/code> dal database &#8220;asset&#8221;:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand( { revokeRolesFromUser: \"productUser00\",\n  roles: [\n    { role: \"AssetsWriter\", db: \"assets\" },\n    \"read\"\n  ],\n  writeConcern: { w: \"majority\" }\n} )<\/code><\/pre>\n<p>L&#8217;utente &#8220;productUser00&#8221; nel database dei prodotti ha ora un solo ruolo rimanente:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"readWrite\",\n    \"db\" : \"stock\"\n  }\n]<\/code><\/pre>\n<h4>Comandi di Gestione dei Ruoli<\/h4>\n<p>I ruoli garantiscono agli utenti l&#8217;accesso alle risorse. Gli amministratori possono usare diversi ruoli integrati per controllare l&#8217;accesso a un sistema MongoDB. Se i ruoli non coprono i privilegi desiderati, potete anche andare oltre e creare nuovi ruoli per un determinato database.<\/p>\n<h5>dropRole<\/h5>\n<p>Con il comando <code>dropRole<\/code> potete eliminare un ruolo definito dall&#8217;utente dal database su cui eseguire il comando. Per eseguire questo comando, usate la seguente sintassi:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    dropRole: \"&lt;role&gt;\",\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt;\n  }\n)<\/code><\/pre>\n<p>Per un&#8217;esecuzione corretta, dovete disporre dell&#8217;azione <code>dropRole<\/code> sul database specificato. Le seguenti operazioni eliminano il ruolo <code>writeTags<\/code> dal database &#8220;products&#8221;:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand(\n  {\n    dropRole: \"writeTags\",\n    writeConcern: { w: \"majority\" }\n  }\n)<\/code><\/pre>\n<h5>creaRole<\/h5>\n<p>Potete usare il comando <code>createRole<\/code> per creare un ruolo e specificarne i privilegi. Il ruolo si applica al database su cui si sceglie di eseguire il comando. Il comando <code>createRole<\/code> restituisce un errore di ruolo duplicato se il ruolo esiste gi\u00e0 nel database.<\/p>\n<p>Per eseguire questo comando, seguite la sintassi indicata:<\/p>\n<pre><code class=\"language-markdown\">db.adminCommand(\n  {\n    createRole: \"&lt;new role&gt;\",\n    privileges: [\n      { resource: { &lt;resource&gt; }, actions: [ \"&lt;action&gt;\", ... ] },\n    ],\n    roles: [\n      { role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" } | \"&lt;role&gt;\",\n    ],\n    authenticationRestrictions: [\n      {\n        clientSource: [\"&lt;IP&gt;\" | \"&lt;CIDR range&gt;\", ...],\n        serverAddress: [\"&lt;IP&gt;\" | \"&lt;CIDR range&gt;\", ...]\n      },\n    ],\n    writeConcern: &lt;write concern document&gt;,\n    comment: &lt;any&gt;\n  }\n)<\/code><\/pre>\n<p>I privilegi di un ruolo si applicano al database in cui il ruolo \u00e8 stato creato. Il ruolo pu\u00f2 ereditare i privilegi da altri ruoli del suo database. Per esempio, un ruolo creato nel database &#8220;admin&#8221; pu\u00f2 includere privilegi che si applicano a un cluster o a tutti i database. Pu\u00f2 anche ereditare privilegi da ruoli presenti in altri database.<\/p>\n<p>Per creare un ruolo in un database, dovete avere due elementi:<\/p>\n<ol>\n<li>L&#8217;azione <code>grantRole<\/code> su quel database indica i privilegi del nuovo ruolo e i ruoli da cui ereditare.<\/li>\n<li>L&#8217;azione <code>createRole<\/code> su quella risorsa del database.<\/li>\n<\/ol>\n<p>Il seguente comando <code>createRole<\/code> creer\u00e0 un ruolo <code>clusterAdmin<\/code> nel database degli utenti:<\/p>\n<pre><code class=\"language-markdown\">db.adminCommand({ createRole: \"clusterAdmin\",\n  privileges: [\n    { resource: { cluster: true }, actions: [ \"addShard\" ] },\n    { resource: { db: \"config\", collection: \"\" }, actions: [ \"find\", \"remove\" ] },\n    { resource: { db: \"users\", collection: \"usersCollection\" }, actions: [ \"update\", \"insert\" ] },\n    { resource: { db: \"\", collection: \"\" }, actions: [ \"find\" ] }\n  ],\n  roles: [\n    { role: \"read\", db: \"user\" }\n  ],\n  writeConcern: { w: \"majority\" , wtimeout: 5000 }\n})<\/code><\/pre>\n<h5>grantRolesToRole<\/h5>\n<p>Con il comando <code>grantRolesToRole<\/code> potete concedere ruoli a un ruolo definito dall&#8217;utente. Il comando <code>grantRolesToRole<\/code> ha effetto sui ruoli del database in cui viene eseguito il comando.<\/p>\n<p>Il comando <code>grantRolesToRole<\/code> ha la seguente sintassi:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    grantRolesToRole: \"&lt;role&gt;\",\n    roles: [\n     { role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" },\n    ],\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt;\n  }\n)<\/code><\/pre>\n<p>I privilegi di accesso sono simili a quelli del comando <code>grantRolesToRole<\/code>: \u00e8 necessaria un&#8217;azione <code>grantRole<\/code> su un database per la corretta esecuzione del comando.<\/p>\n<p>Nell&#8217;esempio seguente, potete usare il comando <code>grantRolesToRole<\/code>\u00a0per aggiornare il ruolo <code>productsReader<\/code> nel database &#8220;prodotti&#8221; affinch\u00e9 erediti i privilegi del ruolo <code>productsWriter<\/code>:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand(\n  {\n    grantRolesToRole: \"productsReader\",\n    roles: [\n      \"productsWriter\"\n    ],\n    writeConcern: { w: \"majority\" , wtimeout: 5000 }\n  }\n)<\/code><\/pre>\n<h5>revokePrivilegesFromRole<\/h5>\n<p>Potete usare il comando <code>revokePrivilegesFromRole<\/code> per rimuovere i privilegi specificati dal ruolo definito dall&#8217;utente nel database in cui viene eseguito il comando. Per una corretta esecuzione, dovete tenere presente la seguente sintassi:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    revokePrivilegesFromRole: \"&lt;role&gt;\",\n    privileges: [\n      { resource: { &lt;resource&gt; }, actions: [ \"&lt;action&gt;\", ... ] },\n    ],\n    writeConcern: &lt;write concern document&gt;,\n    comment: &lt;any&gt;\n  }\n)<\/code><\/pre>\n<p>Per revocare un privilegio, il pattern &#8220;resource document&#8221; deve corrispondere al campo &#8220;resource&#8221; di quel privilegio. Il campo &#8220;actions&#8221; pu\u00f2 essere una corrispondenza esatta o un sottoinsieme.<\/p>\n<p>Per esempio, consideriamo il ruolo <code>manageRole<\/code> nel database dei prodotti con i seguenti privilegi che specificano il database &#8220;manager&#8221; come risorsa:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"resource\" : {\n    \"db\" : \"managers\",\n    \"collection\" : \"\"\n  },\n  \"actions\" : [\n    \"insert\",\n    \"remove\"\n  ]\n}<\/code><\/pre>\n<p>Non potete revocare le azioni &#8220;insert&#8221; o &#8220;remove&#8221; da una sola collezione nel database dei manager. Le seguenti operazioni non causano alcuna modifica al ruolo:<\/p>\n<pre><code class=\"language-markdown\">use managers\ndb.runCommand(\n  {\n    revokePrivilegesFromRole: \"manageRole\",\n    privileges: [\n      {\n        resource : {\n          db : \"managers\",\n          collection : \"kiosks\"\n        },\n        actions : [\n          \"insert\",\n          \"remove\"\n        ]\n      }\n    ]\n  }\n)<\/code><\/pre>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    revokePrivilegesFromRole: \"manageRole\",\n    privileges:\n      [\n        {\n          resource : {\n          db : \"managers\",\n          collection : \"kiosks\"\n        },\n        actions : [\n          \"insert\"\n        ]\n      }\n    ]\n  }\n)<\/code><\/pre>\n<p>Per revocare le azioni &#8220;insert&#8221; e\/o &#8220;remove&#8221; dal ruolo <code>manageRole<\/code>, \u00e8 necessario che il documento della risorsa corrisponda in maniera esatta. Per esempio, la seguente operazione revoca solo l&#8217;azione &#8220;remove&#8221; dal privilegio esistente:<\/p>\n<pre><code class=\"language-markdown\">use managers\ndb.runCommand(\n  {\n    revokePrivilegesFromRole: \"manageRole\",\n    privileges:\n      [\n        {\n          resource : {\n            db : \"managers\",\n            collection : \"\"\n        },\n        actions : [ \"remove\" ]\n      }\n    ]\n  }\n)<\/code><\/pre>\n<p>La seguente operazione rimuover\u00e0 pi\u00f9 privilegi dal ruolo &#8220;executive&#8221; nel database dei manager:<\/p>\n<pre><code class=\"language-markdown\">use managers\ndb.runCommand(\n  {\n    revokePrivilegesFromRole: \"executive\",\n    privileges: [\n      {\n        resource: { db: \"managers\", collection: \"\" },\n        actions: [ \"insert\", \"remove\", \"find\" ]\n      },\n      {\n        resource: { db: \"managers\", collection: \"partners\" },\n        actions: [ \"update\" ]\n      }\n    ],\n    writeConcern: { w: \"majority\" }\n    }\n)<\/code><\/pre>\n<h5>rolesInfo<\/h5>\n<p>Il comando <code>rolesInfo<\/code> restituisce informazioni sui privilegi e sull&#8217;ereditariet\u00e0 dei ruoli specificati, compresi i ruoli integrati e quelli definiti dall&#8217;utente. Potete anche usare il comando <code>rolesInfo<\/code> per recuperare tutti i ruoli di un database.<\/p>\n<p>Per un&#8217;esecuzione corretta, seguite la seguente sintassi:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    rolesInfo: { role: &lt;name&gt;, db: &lt;db&gt; },\n    showPrivileges: &lt;Boolean&gt;,\n    showBuiltinRoles: &lt;Boolean&gt;,\n    comment: &lt;any&gt;\n  }\n)<\/code><\/pre>\n<p>Per ottenere informazioni su un ruolo del database corrente, potete specificare il suo nome come segue:<\/p>\n<pre><code class=\"language-markdown\">{ rolesInfo: \"&lt;rolename&gt;\" }<\/code><\/pre>\n<p>Per ottenere informazioni su un ruolo da un altro database, potete citare il ruolo con un documento che menzioni il ruolo e il database:<\/p>\n<pre><code class=\"language-markdown\">{ rolesInfo: { role: \"&lt;rolename&gt;\", db: \"&lt;database&gt;\" } }<\/code><\/pre>\n<p>Per esempio, il seguente comando restituisce le informazioni sull&#8217;eredit\u00e0 del ruolo per il ruolo esecutivo definito nel database &#8220;managers&#8221;:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n      rolesInfo: { role: \"executive\", db: \"managers\" }\n   }\n)<\/code><\/pre>\n<p>Il prossimo comando restituir\u00e0 le informazioni sull&#8217;ereditariet\u00e0 del ruolo:<br \/>\n<code>accountManager<\/code> sul database su cui viene eseguito il comando:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n      rolesInfo: \"accountManager\"\n   }\n)<\/code><\/pre>\n<p>Il seguente comando restituir\u00e0 i privilegi e l&#8217;ereditariet\u00e0 del ruolo &#8220;executive&#8221; come definito nel database \u201cmanager\u201d:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n     rolesInfo: { role: \"executive\", db: \"managers\" },\n     showPrivileges: true\n   }\n)<\/code><\/pre>\n<p>Per menzionare pi\u00f9 ruoli, potete usare un array. Potete anche menzionare ogni ruolo nell&#8217;array come una stringa o un documento.<\/p>\n<p>Dovreste usare una stringa solo se il ruolo esiste nel database su cui viene eseguito il comando:<\/p>\n<pre><code class=\"language-markdown\">{\n  rolesInfo: [\n    \"&lt;rolename&gt;\",\n    { role: \"&lt;rolename&gt;\", db: \"&lt;database&gt;\" },\n  ]\n}<\/code><\/pre>\n<p>Per esempio, il seguente comando restituir\u00e0 le informazioni relative a tre ruoli su tre database diversi:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n    rolesInfo: [\n      { role: \"executive\", db: \"managers\" },\n      { role: \"accounts\", db: \"departments\" },\n      { role: \"administrator\", db: \"products\" }\n    ]\n  }\n)<\/code><\/pre>\n<p>Potete ottenere sia i privilegi che l&#8217;eredit\u00e0 dei ruoli come segue:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    rolesInfo: [\n      { role: \"executive\", db: \"managers\" },\n      { role: \"accounts\", db: \"departments\" },\n      { role: \"administrator\", db: \"products\" }\n    ],\n    showPrivileges: true\n  }\n)<\/code><\/pre>\n<h2>Incorporare i Documenti di MongoDB per Migliorare le Prestazioni<\/h2>\n<p>I database di documenti come MongoDB vi permettono di definire lo schema in base alle vostre esigenze. Per creare schemi ottimali in MongoDB, potete annidare i documenti. In questo modo, invece di adattare la vostra applicazione a un modello di dati, potete costruire un modello di dati che corrisponda al vostro caso d&#8217;uso.<\/p>\n<p>I documenti annidati vi permettono di <a href=\"https:\/\/kinsta.com\/it\/blog\/come-effettuare-il-backup-del-database-mysql\/\">memorizzare dati correlati<\/a> a cui accedere insieme. Durante la progettazione di schemi per MongoDB, \u00e8 consigliabile incorporare i documenti per impostazione predefinita. Usate i join e i riferimenti lato database o lato applicazione solo quando ne vale la pena.<\/p>\n<p>Assicuratevi che il workload possa recuperare un documento tutte le volte che \u00e8 necessario. Allo stesso tempo, il documento deve avere tutti i dati di cui ha bisogno. Questo aspetto \u00e8 fondamentale per garantire prestazioni eccezionali alla vostra applicazione.<\/p>\n<p>Di seguito troverete alcuni pattern per incorporare i documenti:<\/p>\n<h3>Pattern di Documento Incorporato<\/h3>\n<p>Potete usare questo pattern per incorporare anche complicate sottostrutture nei documenti con cui vengono utilizzate. L&#8217;inclusione di dati collegati in un unico documento pu\u00f2 ridurre il numero di operazioni di lettura necessarie per ottenere i dati. In generale, dovreste strutturare il vostro schema in modo che l&#8217;applicazione riceva tutte le informazioni necessarie con un&#8217;unica operazione di lettura. Quindi, la regola da tenere a mente \u00e8 che <strong>ci\u00f2 che viene usato insieme deve essere memorizzato insieme<\/strong>.<\/p>\n<h3>Pattern del Sottoinsieme Incorporato<\/h3>\n<p>Il pattern del sottoinsieme incorporato \u00e8 un caso ibrido. Si potrebbe usare per una collezione separata di un lungo elenco di elementi correlati, dove potete tenere alcuni di questi elementi a portata di mano per visualizzarli.<\/p>\n<p>Ecco un esempio che elenca le recensioni di film:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.movie.findOne()\n{   \n  _id: 321475,   \n  title: \"The Dark Knight\"\n}  \n&gt; db.review.find({movie_id: 321475})\n{   \n  _id: 264579,   \n  movie_id: 321475,   \n  stars: 4   \n  text: \"Amazing\"   \n}\n{   \n  _id: 375684,   \n  movie_id: 321475,   \n  stars:5,   \n  text: \"Mindblowing\"\n}<\/code><\/pre>\n<p>Immaginate un migliaio di recensioni simili, ma quando mostrate un film volete visualizzare solo le due pi\u00f9 recenti. In questo scenario, ha senso memorizzare questo sottoinsieme come un elenco all&#8217;interno del documento del film:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.movie.findOne({_id: 321475})   \n{   \n  _id: 321475,   \n  title: \"The Dark Knight\",   \n  recent_reviews: [   \n    {_id: 264579, stars: 4, text: \"Amazing\"},   \n    {_id: 375684, stars: 5, text: \"Mindblowing\"}   \n  ]   \n}<\/code><\/pre>\n<p>In poche parole, se accedete abitualmente a un sottoinsieme di articoli correlati, assicuratevi di incorporarlo.<\/p>\n<h3>Accesso Indipendente<\/h3>\n<p>Potreste voler archiviare i sotto-documenti nella loro collezione per separarli dalla loro collezione madre.<\/p>\n<p>Per esempio, prendiamo la linea di prodotti di un&#8217;azienda. Se l&#8217;azienda vende una piccola serie di prodotti, potreste volerli archiviare all&#8217;interno del documento aziendale. Ma se volete riutilizzarli tra le varie aziende o accedervi direttamente in base alla loro unit\u00e0 di stoccaggio (SKU), vorrete archiviare anche questi nella loro collezione.<\/p>\n<p>Se manipolate o accedete a un&#8217;entit\u00e0 in modo indipendente, create una collezione per memorizzarla separatamente.<\/p>\n<h3>Elenchi Non Vincolati<\/h3>\n<p>L&#8217;archiviazione di brevi elenchi di informazioni correlate nel loro documento ha un inconveniente. Se il vostro elenco continua a crescere senza limiti, non dovreste inserirlo in un unico documento. Questo perch\u00e9 non sareste in grado di mantenerlo a lungo.<\/p>\n<p>Le ragioni sono due. Innanzitutto, MongoDB ha un limite alle dimensioni di un singolo documento. In secondo luogo, se accedete al documento con una frequenza troppo elevata, otterrete risultati negativi a causa dell&#8217;utilizzo incontrollato della memoria.<\/p>\n<p>In parole povere, se un elenco inizia a crescere senza limiti, create una collezione per memorizzarlo separatamente.<\/p>\n<h3>Pattern di Riferimento Esteso<\/h3>\n<p>Il pattern di riferimento esteso \u00e8 simile a quello dei sottoinsiemi. Ottimizza anche le informazioni a cui si accede regolarmente da memorizzare nel documento.<\/p>\n<p>Qui, invece di un elenco, viene sfruttato quando un documento fa riferimento a un altro presente nella stessa collezione. Allo stesso tempo, vengono memorizzati anche alcuni campi di quell&#8217;altro documento per un accesso immediato.<\/p>\n<p>Per esempio:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.movie.findOne({_id: 245434})\n{   \n  _id: 245434,   \n  title: \"Mission Impossible 4 - Ghost Protocol\",   \n  studio_id: 924935,   \n  studio_name: \"Paramount Pictures\"   \n}<\/code><\/pre>\n<p>Come potete vedere, viene memorizzato &#8220;the studio_id&#8221; in modo che possiate cercare ulteriori informazioni sullo studio che ha creato il film. Ma anche il nome dello studio viene copiato in questo documento per semplicit\u00e0.<\/p>\n<p>Per incorporare regolarmente le informazioni nei documenti modificati, ricordatevi di aggiornare i documenti in cui avete copiato le informazioni quando vengono modificate. In altre parole, se accedete abitualmente ad alcuni campi di un documento di riferimento, incorporateli.<\/p>\n<h2>Come Monitorare MongoDB<\/h2>\n<p>Potete usare <a href=\"https:\/\/kinsta.com\/it\/blog\/strumenti-apm\/\">strumenti di monitoraggio<\/a> come <a href=\"https:\/\/kinsta.com\/it\/strumento-apm\/\">Kinsta APM<\/a> per eseguire il debug di lunghe chiamate API, query di database lente, lunghe richieste di URL esterni, per citarne alcuni. Potete anche sfruttare i comandi per migliorare le prestazioni del database o usarli per controllare <a href=\"https:\/\/kinsta.com\/it\/blog\/riparare-il-database-di-wordpress\/\">salute delle istanze del vostro database<\/a>.<\/p>\n<h3>Perch\u00e9 Monitorare i Database MongoDB?<\/h3>\n<p>Un aspetto fondamentale della <a href=\"https:\/\/kinsta.com\/it\/mykinsta\/\">pianificazione dell&#8217;amministrazione dei database<\/a> \u00e8 il monitoraggio delle prestazioni e dello stato di salute del cluster. MongoDB Atlas gestisce la maggior parte delle attivit\u00e0 di amministrazione grazie alle sue capacit\u00e0 di fault-tolerance\/scaling.<\/p>\n<p>Tuttavia, gli utenti devono sapere come monitorare i cluster. Devono anche sapere come scalare o modificare qualsiasi cosa sia necessaria prima di andare in crisi.<\/p>\n<p>Monitorando i database MongoDB, potete:<\/p>\n<ul>\n<li>Osservare l&#8217;utilizzo delle risorse.<\/li>\n<li>Capire la capacit\u00e0 attuale del vostro database.<\/li>\n<li>Reagire e rilevare i problemi in tempo reale per migliorare il vostro stack applicativo.<\/li>\n<li>Osservare la presenza di problemi di prestazioni e comportamenti anomali.<\/li>\n<li>Allinearvi ai requisiti di governance\/protezione dei dati e agli accordi sul livello di servizio (SLA).<\/li>\n<\/ul>\n<h3>Metriche Chiave da Monitorare<\/h3>\n<p>Durante il monitoraggio di MongoDB, ci sono quattro aspetti chiave da tenere a mente:<\/p>\n<h4>Metriche Hardware di MongoDB<\/h4>\n<p>Ecco le metriche principali per il monitoraggio dell&#8217;hardware:<\/p>\n<h5>Normalized Process CPU<\/h5>\n<p>\u00c8 definita come la percentuale di tempo spesa dalla CPU per il software applicativo che gestisce il processo MongoDB.<\/p>\n<p>\u00c8 possibile scalare questo valore in un intervallo compreso tra 0 e 100% dividendolo per il numero di core della CPU. Include la CPU sfruttata da moduli come il kernel e l&#8217;utente.<\/p>\n<p>Un&#8217;elevata CPU del kernel potrebbe indicare l&#8217;esaurimento della CPU attraverso le operazioni del sistema operativo. Ma l&#8217;utente legato alle operazioni di MongoDB potrebbe essere la causa principale dell&#8217;esaurimento della CPU.<\/p>\n<h5>Normalized System CPU<\/h5>\n<p>\u00c8 la percentuale di tempo che la CPU impiega per le chiamate di sistema al servizio del processo MongoDB. \u00c8 possibile scalare il valore da 0 a 100% dividendolo per il numero di core della CPU. Copre anche la CPU utilizzata da moduli come iowait, user, kernel, steal, ecc.<\/p>\n<p>Una CPU utente o un kernel alto potrebbero indicare l&#8217;esaurimento della CPU a causa delle operazioni di MongoDB (software). Uno iowait elevato potrebbe essere legato all&#8217;esaurimento dello storage che causa l&#8217;esaurimento della CPU.<\/p>\n<h5>Disk IOPS<\/h5>\n<p>Disk IOPS \u00e8 la media delle operazioni di IO consumate al secondo sulla partizione del disco di MongoDB.<\/p>\n<h5>Disk Latency o Latenza del Disco<\/h5>\n<p>Si tratta della latenza di lettura e scrittura della partizione disco in millisecondi in MongoDB. Valori elevati (&gt;500ms) indicano che il livello di archiviazione potrebbe influire sulle prestazioni di MongoDB.<\/p>\n<h5>System Memory o Memoria di Sistema<\/h5>\n<p>Utilizza la memoria di sistema per descrivere i byte di memoria fisica utilizzati rispetto allo spazio libero disponibile.<\/p>\n<p>La metrica disponibile indica il numero di byte di memoria di sistema disponibili. Potete usarla per eseguire nuove applicazioni senza swapping.<\/p>\n<h5>Disk Space Free<\/h5>\n<p>\u00c8 definito come il totale dei byte di spazio libero sul disco della partizione di MongoDB. MongoDB Atlas offre funzionalit\u00e0 di autoscaling basate su questa metrica.<\/p>\n<h5>Swap Usage<\/h5>\n<p>Potete sfruttare un grafico sull&#8217;utilizzo dello swap per descrivere quanta memoria viene allocata sul dispositivo di swap. Una metrica elevata in questo grafico indica che lo swap viene utilizzato. Questo indica che la memoria \u00e8 sottoprovvista per il carico di lavoro corrente.<\/p>\n<h4>Metriche di Connessione e Funzionamento del Cluster MongoDB<\/h4>\n<p>Ecco le principali metriche di funzionamento e di connessione:<\/p>\n<h5>Operation Execution Times<\/h5>\n<p>Il tempo medio delle operazioni (operazioni di scrittura e lettura) eseguite nel periodo di campionamento selezionato.<\/p>\n<h5>Opcounters<\/h5>\n<p>\u00c8 il tasso medio di operazioni eseguite al secondo nel periodo di campionamento selezionato. Il grafico\/metrica Opcounters mostra la ripartizione dei tipi di operazioni e la velocit\u00e0 dell&#8217;istanza.<\/p>\n<h5>Connections<\/h5>\n<p>Questa metrica si riferisce al numero di connessioni aperte all&#8217;istanza. Picchi o numeri elevati potrebbero indicare una strategia di connessione non ottimale da parte del server o del client che non risponde.<\/p>\n<h5>Query Targeting<\/h5>\n<p>Si tratta della velocit\u00e0 media al secondo nel periodo di campionamento selezionato dei documenti scansionati. Per gli esecutori di query, si tratta della valutazione del piano di query e delle query. Il Query Targeting mostra il rapporto tra il numero di documenti scansionati e il numero di documenti restituiti.<\/p>\n<p>Un rapporto elevato indica operazioni non ottimali. Queste operazioni scansionano molti documenti per restituirne una parte minore.<\/p>\n<h5>Scan and Order<\/h5>\n<p>Descrive la velocit\u00e0 media al secondo nel periodo di campionamento scelto per le query. Restituisce risultati ordinati che non possono eseguire l&#8217;operazione di ordinamento utilizzando un indice.<\/p>\n<h5>Queue<\/h5>\n<p>Le queue possono descrivere il numero di operazioni in attesa di un blocco, sia in scrittura che in lettura. Queue elevate possono indicare l&#8217;esistenza di un design dello schema non ottimale. Potrebbero anche indicare percorsi di scrittura in conflitto, spingendo una forte competizione sulle risorse del database.<\/p>\n<h4>Metriche di Replica di MongoDB<\/h4>\n<p>Ecco le metriche principali per il monitoraggio della replica:<\/p>\n<h5>Replication Oplog Window<\/h5>\n<p>Questa metrica elenca il numero approssimativo di ore disponibili nell&#8217;oplog di replica del primario. Se un secondario ha un ritardo superiore a questo valore, significa che non \u00e8 in grado di tenere il passo e dovr\u00e0 effettuare una risincronizzazione completa.<\/p>\n<h5>Replication Lag<\/h5>\n<p>Il ritardo di replica \u00e8 definito come il numero approssimativo di secondi in cui un nodo secondario \u00e8 in ritardo rispetto al primario nelle operazioni di scrittura. Un ritardo di replica elevato indica che il secondario ha difficolt\u00e0 a replicare. Potrebbe avere un impatto sulla latenza delle vostre operazioni, dato che le connessioni sono di tipo lettura\/scrittura.<\/p>\n<h5>Replication Headroom<\/h5>\n<p>Questa metrica si riferisce alla differenza tra la finestra di oplog della replica primaria e il ritardo di replica della secondaria. Se questo valore arriva a zero, il secondario potrebbe entrare in modalit\u00e0 RECOVERING.<\/p>\n<h5>Opcounters &#8211; repl<\/h5>\n<p>Opcounters &#8211; repl \u00e8 definito come il tasso medio di operazioni di replica eseguite al secondo per il periodo di campionamento scelto. Con opcounters &#8211; graph\/metric potete dare un&#8217;occhiata alla velocit\u00e0 delle operazioni e alla suddivisione dei tipi di operazioni per l&#8217;istanza specificata.<\/p>\n<h5>Oplog GB\/Hour<\/h5>\n<p>Si tratta del numero medio di gigabyte di oplog generati dal sistema primario all&#8217;ora. Un volume elevato e inaspettato di oplog potrebbe indicare un carico di lavoro di scrittura molto insufficiente o un problema di progettazione dello schema.<\/p>\n<h3>Strumenti di Monitoraggio delle Prestazioni di MongoDB<\/h3>\n<p>MongoDB dispone di strumenti di interfaccia utente integrati in Cloud Manager, Atlas e Ops Manager per il monitoraggio delle prestazioni. Offre inoltre alcuni comandi e strumenti indipendenti per analizzare i dati pi\u00f9 grezzi. Parleremo di alcuni strumenti che potete eseguire da un host con accesso e ruoli appropriati per controllare il vostro ambiente:<\/p>\n<h4>mongotop<\/h4>\n<p>Potete usare questo comando per monitorare il tempo che un&#8217;istanza di MongoDB impiega per scrivere e leggere dati per ogni raccolta. Usate la seguente sintassi:<\/p>\n<pre><code class=\"language-markdown\">mongotop &lt;options&gt; &lt;connection-string&gt; &lt;polling-interval in seconds&gt;<\/code><\/pre>\n<h4>rs.status()<\/h4>\n<p>Questo comando restituisce lo stato del set di repliche. Viene eseguito dal punto di vista del membro in cui viene eseguito il metodo.<\/p>\n<h4>mongostat<\/h4>\n<p>Potete usare il comando <code>mongostat<\/code> per avere una rapida panoramica dello stato della vostra istanza del server MongoDB. Per ottenere un risultato ottimale, potete usarlo per osservare una singola istanza per un evento specifico, in quanto offre una visione in tempo reale.<\/p>\n<p>Usate questo comando per monitorare le statistiche di base del server come le code di blocco, la ripartizione delle operazioni, le statistiche sulla memoria di MongoDB e le connessioni\/rete:<\/p>\n<pre><code class=\"language-markdown\">mongostat &lt;options&gt; &lt;connection-string&gt; &lt;polling interval in seconds&gt;<\/code><\/pre>\n<h4>dbStats<\/h4>\n<p>Questo comando restituisce le statistiche di archiviazione per un database specifico, come il numero di indici e la loro dimensione, i dati totali della raccolta rispetto alla dimensione dell&#8217;archiviazione e le statistiche relative alla raccolta (numero di raccolte e documenti).<\/p>\n<h4>db.serverStatus()<\/h4>\n<p>Potete usare il comando <code>db.serverStatus()<\/code> per avere una panoramica dello stato del database. Il comando fornisce un documento che rappresenta i contatori metrici dell&#8217;istanza corrente. Eseguite questo comando a intervalli regolari per raccogliere le statistiche dell&#8217;istanza.<\/p>\n<h4>collStats<\/h4>\n<p>Il comando <code>collStats<\/code> raccoglie statistiche simili a quelle offerte da <code>dbStats<\/code> a livello di collezione. Il suo output consiste in un conteggio degli oggetti della collezione, la quantit\u00e0 di spazio su disco consumato dalla collezione, la dimensione della collezione e le informazioni relative agli indici per una determinata collezione.<\/p>\n<p>Potete usare tutti questi comandi per offrire una reportistica e un monitoraggio in tempo reale del server di database che vi permette di monitorare le prestazioni e gli errori del database e di prendere decisioni informate per perfezionare un database.<\/p>\n<h2>Come Eliminare un Database MongoDB<\/h2>\n<p>Per eliminare un database creato in MongoDB, dovete connettervi ad esso attraverso la parola chiave use.<\/p>\n<p>Supponiamo che abbiate creato un database chiamato &#8220;Engineers&#8221;. Per connettervi al database, userete il seguente comando:<\/p>\n<pre><code class=\"language-markdown\">use Engineers<\/code><\/pre>\n<p>Digitate quindi <code>db.dropDatabase()<\/code> per eliminare il database. Dopo l&#8217;esecuzione, questo \u00e8 il risultato che potete aspettarvi:<\/p>\n<pre><code class=\"language-markdown\">{ \"dropped\"  :  \"Engineers\", \"ok\" : 1 }<\/code><\/pre>\n<p>Potete eseguire il comando <code>showdbs<\/code> per verificare se il database esiste ancora.<\/p>\n<h2>Riepilogo<\/h2>\n<p>Per sfruttare fino all&#8217;ultima goccia di valore di MongoDB, dovete avere una solida conoscenza dei fondamenti. \u00c8 quindi importante conoscere i database MongoDB come le vostre tasche. A tal fine \u00e8 necessario innanzitutto familiarizzare con i metodi di <a href=\"https:\/\/kinsta.com\/it\/devkinsta\/\">creazione di un database<\/a>.<\/p>\n\n<p>In questo articolo abbiamo fatto luce sui diversi metodi che potete usare per creare un database in MongoDB, seguiti da una descrizione dettagliata di alcuni interessanti comandi MongoDB per tenere sotto controllo i vostri database. Infine, abbiamo concluso la discussione parlando di come potete sfruttare i documenti incorporati e gli strumenti di monitoraggio delle prestazioni in MongoDB per garantire che il vostro flusso di lavoro funzioni al massimo dell&#8217;efficienza.<\/p>\n<p>Cosa ne pensate di questi comandi MongoDB? Abbiamo tralasciato un aspetto o un metodo che avreste voluto vedere qui? Fatecelo sapere nei commenti!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In base alle esigenze del vostro software, potreste dare priorit\u00e0 alla flessibilit\u00e0, alla scalabilit\u00e0, alle prestazioni o alla velocit\u00e0. Per questo motivo, developer e aziende sono &#8230;<\/p>\n","protected":false},"author":117,"featured_media":61706,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[10885,25897,32,67],"topic":[25883],"class_list":["post-61705","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-mongodb","tag-sviluppo-web","tag-webdev","topic-strumenti-di-sviluppo-web"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Come Creare un Database MongoDB: 6 Aspetti da Conoscere<\/title>\n<meta name=\"description\" content=\"Per comprendere meglio MongoDB, \u00e8 necessario sapere come creare un database, a partire dal comando MongoDB Create Database.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come Creare un Database MongoDB: 6 Aspetti da Conoscere\" \/>\n<meta property=\"og:description\" content=\"Per comprendere meglio MongoDB, \u00e8 necessario sapere come creare un database, a partire dal comando MongoDB Create Database.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-08T08:51:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-14T15:37:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Per comprendere meglio MongoDB, \u00e8 necessario sapere come creare un database, a partire dal comando MongoDB Create Database.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"31 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"Come Creare un Database MongoDB: 6 Aspetti da Conoscere\",\"datePublished\":\"2022-11-08T08:51:37+00:00\",\"dateModified\":\"2023-06-14T15:37:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/\"},\"wordCount\":5648,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png\",\"keywords\":[\"database\",\"MongoDB\",\"sviluppo web\",\"webdev\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/\",\"name\":\"Come Creare un Database MongoDB: 6 Aspetti da Conoscere\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png\",\"datePublished\":\"2022-11-08T08:51:37+00:00\",\"dateModified\":\"2023-06-14T15:37:13+00:00\",\"description\":\"Per comprendere meglio MongoDB, \u00e8 necessario sapere come creare un database, a partire dal comando MongoDB Create Database.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Strumenti di Sviluppo Web\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/strumenti-di-sviluppo-web\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Come Creare un Database MongoDB: 6 Aspetti da Conoscere\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Come Creare un Database MongoDB: 6 Aspetti da Conoscere","description":"Per comprendere meglio MongoDB, \u00e8 necessario sapere come creare un database, a partire dal comando MongoDB Create Database.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/","og_locale":"it_IT","og_type":"article","og_title":"Come Creare un Database MongoDB: 6 Aspetti da Conoscere","og_description":"Per comprendere meglio MongoDB, \u00e8 necessario sapere come creare un database, a partire dal comando MongoDB Create Database.","og_url":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2022-11-08T08:51:37+00:00","article_modified_time":"2023-06-14T15:37:13+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"Per comprendere meglio MongoDB, \u00e8 necessario sapere come creare un database, a partire dal comando MongoDB Create Database.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png","twitter_creator":"@salmanravoof","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Salman Ravoof","Tempo di lettura stimato":"31 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"Come Creare un Database MongoDB: 6 Aspetti da Conoscere","datePublished":"2022-11-08T08:51:37+00:00","dateModified":"2023-06-14T15:37:13+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/"},"wordCount":5648,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png","keywords":["database","MongoDB","sviluppo web","webdev"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/","url":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/","name":"Come Creare un Database MongoDB: 6 Aspetti da Conoscere","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png","datePublished":"2022-11-08T08:51:37+00:00","dateModified":"2023-06-14T15:37:13+00:00","description":"Per comprendere meglio MongoDB, \u00e8 necessario sapere come creare un database, a partire dal comando MongoDB Create Database.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/11\/mongodb-create-database.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/creare-database-mongodb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Strumenti di Sviluppo Web","item":"https:\/\/kinsta.com\/it\/argomenti\/strumenti-di-sviluppo-web\/"},{"@type":"ListItem","position":3,"name":"Come Creare un Database MongoDB: 6 Aspetti da Conoscere"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/it\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/61705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=61705"}],"version-history":[{"count":16,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/61705\/revisions"}],"predecessor-version":[{"id":70239,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/61705\/revisions\/70239"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/61705\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/61705\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/61705\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/61705\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/61705\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/61705\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/61705\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/61705\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/61705\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/61705\/translations\/dk"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/61705\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/61706"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=61705"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=61705"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=61705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}