Introduzione
MongoDB utilizza strutture orientate ai documenti per archiviare, gestire ed elaborare i dati. I singoli documenti sono organizzati in raccolte, che a loro volta sono archiviate in database. Poiché lo schema di ogni documento non è definito da uno schema statico, i sistemi basati su documenti offrono maggiore flessibilità rispetto ai sistemi relazionali composti da tabelle e record.
In questa guida parleremo di come creare e gestire le strutture che MongoDB utilizza per organizzare i dati. Tratteremo come creare e gestire database e quindi come creare raccolte per contenere documenti simili o correlati.
Come visualizzare i database esistenti
Prima di iniziare a creare nuovi database, è utile familiarizzare con alcuni dei metodi forniti da MongoDB per trovare informazioni sui database esistenti. Questo può aiutarti a comprendere lo stato attuale del sistema prima di iniziare ad apportare modifiche.
Per visualizzare tutti i database sul sistema a cui hai accesso, usa show dbs
metodo:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
MongoDB risponderà con i nomi di tutti i database accessibili sul sistema e un riepilogo del loro attuale spazio di archiviazione.
Per vedere su quale database sei attualmente impostato per operare, usa db.getName()
comando o il suo alias abbreviato, db
:
db
test
Potresti scoprire che stai attualmente utilizzando un database che non è stato elencato da show dbs
comando. Questo perché in MongoDB, finché non scrivi il primo documento nel database, il database non viene effettivamente creato. Quindi, nell'output di esempio sopra, la shell è pronta per operare su un test
database, ma poiché non esiste ancora, non verrà restituito da show dbs
comando.
Per passare a un database diverso, puoi utilizzare use
comando:
use admin
switched to db admin
Per ottenere alcune informazioni di base sul tuo attuale database, puoi usare db.stats()
metodo:
db.stats()
{ "db" : "admin", "collections" : 3, "views" : 0, "objects" : 4, "avgObjSize" : 278.25, "dataSize" : 1113, "storageSize" : 86016, "indexes" : 5, "indexSize" : 147456, "totalSize" : 233472, "scaleFactor" : 1, "fsUsedSize" : 2876923904, "fsTotalSize" : 25832407040, "ok" : 1}
L'output mostra informazioni sul numero di raccolte all'interno del database, statistiche di archiviazione, informazioni sull'indice e altro.
Come creare database
MongoDB non ha un comando esplicito per la creazione di un nuovo database. Invece, come accennato in precedenza, devi invece indicare a MongoDB che vuoi scrivere nuovi documenti in un nuovo database. Quando questi documenti vengono creati, creeranno implicitamente il database.
Per preparare MongoDB a scrivere su un nuovo database, emetti use
comando per passare a un database inesistente.
Qui imposteremo MongoDB per creare un nuovo database chiamato playground
:
use playground
switched to db playground
Se controlli il tuo attuale database, confermerà che il playground
database è attualmente la destinazione dei comandi relativi al database:
db
playground
Tuttavia, come accennato in precedenza, poiché non abbiamo ancora creato alcun documento, il database stesso non è stato ancora creato:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Per creare effettivamente il nuovo database, dovremo prima creare qualcosa.
Come visualizzare le raccolte in un database
In MongoDB, raccolte sono strutture utilizzate per raggruppare i documenti utilizzando qualsiasi sistema di categorizzazione si desidera implementare. Vivono all'interno di database e archiviano documenti.
Puoi vedere le raccolte disponibili nel database che stai attualmente utilizzando utilizzando show collections
metodo.
Qui passeremo all'admin
database che ha alcune raccolte disponibili da dimostrare:
use adminshow collections
system.rolessystem.userssystem.version
In alternativa, puoi recuperare gli stessi nomi di raccolta in un array usando db.getCollectionNames()
metodo:
db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]
Per mostrare ulteriori informazioni sulle raccolte nel database corrente, usa db.getCollectionInfos()
metodo:
db.getCollectionInfos()
[ { "name" : "system.roles", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("776b1fd7-6014-4191-b33c-21350b590627") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }, { "name" : "system.users", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("8c824fd1-2150-4413-8fac-0b77d16505e5") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }, { "name" : "system.version", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Puoi anche passare facoltativamente un documento al comando per filtrare i risultati. Ad esempio, se sei interessato solo a vedere le informazioni su system.version
raccolta, puoi digitare:
db.getCollectionInfos( { name: "system.version" })
[ { "name" : "system.version", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Per controllare quanti documenti contiene una raccolta, usa db.<collection>.count()
metodo. Ad esempio, il comando seguente controlla quanti documenti ci sono in system.users
collezione:
db.system.users.count()
2
Per visualizzare le statistiche di base sulle raccolte nel database corrente, utilizzare db.printCollectionStats()
metodo:
db.printCollectionStats()
Il comando può produrre più informazioni di quelle che puoi facilmente consumare, ma contiene, ma è utile in alcuni scenari in cui è necessario esaminare in modo approfondito le caratteristiche di una raccolta.
Come creare raccolte
Per creare una nuova raccolta, sono disponibili due opzioni:puoi creare raccolte in modo implicito o esplicito.
Come con i database, MongoDB può creare automaticamente raccolte la prima volta che vi viene scritto un documento. Questo metodo dice a MongoDB di creare una nuova raccolta inserendo un documento in una raccolta che non esiste ancora.
Ad esempio, possiamo tornare al playground
database a cui eravamo interessati in precedenza. Una volta che siamo in quello spazio dei nomi, possiamo inserire un nuovo documento in una raccolta chiamando insert.()
comando sul nome che vorremmo utilizzare per la nuova raccolta. Qui possiamo creare un documento su una diapositiva in una nuova raccolta chiamata equipment
:
use playgrounddb.equipment.insert({name: "slide"})
switched to db playgroundWriteResult({ "nInserted" : 1 })
L'output indica che è stato scritto un documento. Il comando precedente ha eseguito tre azioni separate. Innanzitutto, MongoDB ha creato il playground
database a cui abbiamo fatto riferimento nel nostro use
comando. Ha anche creato l'equipment
raccolta all'interno del database poiché chiamiamo insert()
comando su quel nome di raccolta. Infine, crea il documento vero e proprio all'interno dell'equipment
raccolta utilizzando l'input che abbiamo fornito a insert()
comando.
Puoi verificare che tutte queste azioni siano state eseguite con i seguenti comandi:
show dbsshow collectionsdb.equipment.count()db.equipment.find()
L'output dovrebbe mostrare che il playground
database è ora tra i database elencati, quello dell'equipment
raccolta è elencata, che è presente un documento all'interno dell'equipment
raccolta e che il documento è il {name: "slide"}
documento che abbiamo inserito nel comando.
L'altra opzione da utilizzare per creare raccolte consiste nell'utilizzare in modo esplicito db.createCollection()
metodo. Ciò ti consente di creare raccolte senza aggiungere alcun documento.
Ad esempio, puoi creare una nuova raccolta nel playground
database chiamato maintenance.requests
digitando:
db.createCollection("maintenance.requests")
{ "ok" : 1 }
Possiamo verificare che la nuova collezione venga visualizzata quando la richiediamo, ma che non abbia documenti:
show collectionsdb.maintenance.requests.count()
equipmentmaintenance.requests0
Il db.createCollection()
Il metodo è utile principalmente perché consente di specificare varie opzioni al momento della creazione. Ad esempio, potremmo voler creare una raccolta limitata , che è una raccolta che mantiene un limite superiore alla dimensione allocata memorizzata eliminando il documento più vecchio quando è pieno.
Per creare una raccolta limitata denominata notifications
che può memorizzare, al massimo, 10240 byte di informazioni, puoi chiamare:
db.createCollection( "notifications", { capped: true, size: 10240 })
{ "ok" : 1}
Questo creerà una notification
limitata raccolta, che possiamo verificare digitando:
db.getCollecitonInfos({"options.capped": true})
[ { "name" : "notifications", "type" : "collection", "options" : { "capped" : true, "size" : 10240 }, "info" : { "readOnly" : false, "uuid" : UUID("dff7bfb0-1cfc-4170-ba60-fbb834ac6925") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Come eliminare le raccolte
Per eliminare una raccolta, puoi utilizzare drop()
metodo sulla raccolta stessa.
Ad esempio, per eliminare le notifications
limitate raccolta che abbiamo creato, puoi digitare:
db.notifications.drop()
true
Puoi verificare che l'operazione sia andata a buon fine elencando nuovamente le raccolte nel database corrente:
show collections
equipmentmaintenance.requests
Come eliminare i database
Per eliminare un intero database, chiama db.dropDatabase()
comando. Questo eliminerà il database corrente, quindi assicurati di essere nel database corretto prima di eseguire:
use playgrounddb.dropDatabase()
switched to db playground{ "dropped" : "playground", "ok" : 1 }
Se controlli l'elenco dei database disponibili, playground
non è più visualizzato:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Dal momento che non siamo ancora passati a un nuovo database, MongoDB è ancora impostato per creare un playground
database se dovessimo scegliere di aggiungere una nuova raccolta o documento. Puoi verificarlo con il db
comando:
db
playground
Conclusione
La creazione e la gestione di database e raccolte è un'abilità importante quando si utilizza MongoDB. Questi strumenti organizzativi di base consentono di raggruppare documenti correlati, interrogare sottoinsiemi di informazioni e impostare criteri di autorizzazione per diversi tipi di dati. Familiarizzare con come gestire efficacemente queste strutture ti consentirà di gestire i tuoi dati in modo più efficace e con meno sorprese.