sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man hanterar databaser och samlingar i MongoDB


Introduktion

MongoDB använder dokumentorienterade strukturer för att lagra, hantera och bearbeta data. Enskilda dokument organiseras i samlingar som i sin tur lagras i databaser. Eftersom schemat för varje dokument inte definieras av ett statiskt schema, erbjuder dokumentbaserade system mer flexibilitet än relationssystem som är sammansatta av tabeller och poster.

I den här guiden kommer vi att prata om hur man skapar och hanterar de strukturer som MongoDB använder för att organisera data. Vi kommer att ta upp hur man skapar och hanterar databaser och sedan hur man gör samlingar för att hålla liknande eller relaterade dokument.



Hur man visar befintliga databaser

Innan vi börjar skapa nya databaser är det bra att bekanta sig med några av metoderna som MongoDB tillhandahåller för att hitta information om befintliga databaser. Detta kan hjälpa dig att förstå systemets nuvarande tillstånd innan du börjar göra ändringar.

För att visa alla databaser på systemet som du har tillgång till, använd show dbs metod:

show dbs
admin   0.000GBconfig  0.000GBlocal   0.000GB

MongoDB kommer att svara med namnen på alla tillgängliga databaser i systemet samt en sammanfattning av deras nuvarande lagringsutrymme.

För att se vilken databas du för närvarande är inställd att arbeta på, använd db.getName() kommando eller dess förkortningsalias, db :

db
test

Du kanske upptäcker att du för närvarande använder en databas som inte var listad av show dbs kommando. Detta beror på att i MongoDB, tills du skriver det första dokumentet till databasen, skapas inte databasen faktiskt. Så i exemplet ovan är skalet förberett att arbeta på ett test databas, men eftersom den inte finns ännu kommer den inte att returneras av show dbs kommando.

För att byta till en annan databas kan du använda use kommando:

use admin
switched to db admin

För att få lite grundläggande information om din nuvarande databas kan du använda db.stats() metod:

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}

Resultatet visar information om antalet samlingar i databasen, lagringsstatistik, indexinformation och mer.



Så skapar du databaser

MongoDB har inget explicit kommando för att skapa en ny databas. Istället måste du som tidigare nämnt istället ange för MongoDB att du vill skriva nya dokument till en ny databas. När dessa dokument skapas kommer de implicit att skapa databasen.

För att förbereda MongoDB för att skriva till en ny databas, utfärda use kommando för att byta till en obefintlig databas.

Här kommer vi att ställa in MongoDB för att skapa en ny databas som heter playground :

use playground
switched to db playground

Om du kontrollerar din nuvarande databas kommer den att bekräfta att playground databasen är för närvarande målet för databasrelaterade kommandon:

db
playground

Men som tidigare nämnts, eftersom vi ännu inte har skapat några dokument, har själva databasen inte skapats ännu:

show dbs
admin   0.000GBconfig  0.000GBlocal   0.000GB

För att faktiskt skapa den nya databasen måste vi skapa något först.



Så visar du samlingarna i en databas

I MongoDB, samlingar är strukturer som används för att gruppera dokument med hjälp av vilket system för kategorisering du än vill implementera. De bor i databaser och lagrar dokument.

Du kan se de tillgängliga samlingarna i databasen du använder för närvarande genom att använda show collections metod.

Här byter vi till admin databas som har några samlingar tillgängliga för att demonstrera:

use adminshow collections
system.rolessystem.userssystem.version

Alternativt kan du hämta samma samlingsnamn i en array med hjälp av db.getCollectionNames() metod:

db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]

För att visa ytterligare information om samlingarna i den aktuella databasen, använd db.getCollectionInfos() metod:

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_"                }        }]

Du kan också valfritt skicka in ett dokument till kommandot för att filtrera resultaten. Till exempel, om du bara är intresserad av att se informationen om system.version samling kan du skriva:

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_"                }        }]

För att kontrollera hur många dokument en samling innehåller, använd db.<collection>.count() metod. Till exempel kontrollerar följande kommando hur många dokument som finns i system.users samling:

db.system.users.count()
2

För att se grundläggande statistik om samlingarna i den aktuella databasen, använd db.printCollectionStats() metod:

db.printCollectionStats()

Kommandot kan mata ut mer information än du enkelt kan konsumera, men innehåller, men är användbart i vissa scenarier där du behöver ta en djupgående titt på egenskaperna hos en samling.



Så skapar du samlingar

För att skapa en ny samling finns det två alternativ:du kan skapa samlingar antingen implicit eller explicit.

Precis som med databaser kan MongoDB automatiskt skapa samlingar första gången ett dokument skrivs till dem. Den här metoden säger åt MongoDB att skapa en ny samling genom att infoga ett dokument i en samling som inte finns ännu.

Till exempel kan vi byta tillbaka till playground databas som vi var intresserade av tidigare. När vi väl är i det namnutrymmet kan vi infoga ett nytt dokument i en samling genom att anropa insert.() kommandot på namnet vi vill använda för den nya kollektionen. Här kan vi skapa ett dokument om en bild i en ny samling som heter equipment :

use playgrounddb.equipment.insert({name: "slide"})
switched to db playgroundWriteResult({ "nInserted" : 1 })

Utdata indikerar att ett dokument skrevs. Ovanstående kommando utförde tre separata åtgärder. Först skapade MongoDB playground databas som vi hänvisade till i vår use kommando. Det skapade också equipment samling i databasen eftersom vi anropar insert() kommandot på samlingens namn. Slutligen skapar den själva dokumentet i equipment samling med hjälp av indata som vi gav till insert() kommando.

Du kan verifiera att alla dessa åtgärder har utförts med följande kommandon:

show dbsshow collectionsdb.equipment.count()db.equipment.find()

Utdata ska visa att playground databasen är nu bland de listade databaserna, som equipment samlingen är listad, att det finns ett dokument inom equipment samling och att dokumentet är {name: "slide"} dokument som vi infogade i kommandot.

Det andra alternativet att använda för att skapa samlingar är att uttryckligen använda db.createCollection() metod. Detta gör att du kan skapa samlingar utan att lägga till några dokument till dem.

Du kan till exempel skapa en ny samling i playground databas som heter maintenance.requests genom att skriva:

db.createCollection("maintenance.requests")
{ "ok" : 1 }

Vi kan verifiera att den nya samlingen dyker upp när vi frågar efter den, men att den inte har några dokument:

show collectionsdb.maintenance.requests.count()
equipmentmaintenance.requests0

db.createCollection() Metoden är i första hand användbar eftersom den låter dig ange olika alternativ vid skapandet. Vi kanske till exempel vill skapa en begränsad samling , som är en samling som upprätthåller en övre gräns för sin tilldelade storlek som den lagrar genom att radera dess äldsta dokument när det är fullt.

För att skapa en begränsad samling som heter notifications som kan lagra högst 10240 byte med information, kan du ringa:

db.createCollection(    "notifications",    {        capped: true,        size: 10240    })
{ "ok" : 1}

Detta skapar ett begränsat notification samling, som vi kan verifiera genom att skriva:

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_"                }        }]


Hur man tar bort samlingar

För att radera en samling kan du använda drop() metod på själva samlingen.

Till exempel för att ta bort de begränsade notifications samling vi skapade, kan du skriva:

db.notifications.drop()
true

Du kan verifiera att operationen lyckades genom att lista samlingarna i den aktuella databasen igen:

show collections
equipmentmaintenance.requests


Hur man tar bort databaser

För att ta bort en hel databas, anropa db.dropDatabase() kommando. Detta kommer att radera den aktuella databasen, så se till att du är på rätt databas innan du kör:

use playgrounddb.dropDatabase()
switched to db playground{ "dropped" : "playground", "ok" : 1 }

Om du kontrollerar listan över tillgängliga databaser, playground visas inte längre:

show dbs
admin   0.000GBconfig  0.000GBlocal   0.000GB

Eftersom vi inte har bytt till en ny databas än är MongoDB fortfarande inställd för att skapa en playground databas bör vi välja att lägga till en ny samling eller dokument. Du kan verifiera detta med db kommando:

db
playground


Slutsats

Att skapa och hantera databaser och samlingar är en viktig färdighet när du använder MongoDB. Dessa grundläggande organisationsverktyg låter dig gruppera relaterade dokument, fråga undergrupper av information och ställa in auktoriseringspolicyer för olika typer av data. Genom att bekanta dig med hur du effektivt hanterar dessa strukturer kan du hantera din data mer effektivt med färre överraskningar.




  1. Kan mongorestore ta ett enda url-argument istället för separata argument?

  2. Redis publicera-prenumerera:Är Redis garanterad att leverera budskapet även under massiv stress?

  3. Redis-stödd ASP.NET SessionState-leverantör

  4. Varför gjordes bara en anslutning till redis i detta givna program?