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

Come gestire database e raccolte in MongoDB


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.