Inleiding
MongoDB gebruikt documentgeoriënteerde structuren om gegevens op te slaan, te beheren en te verwerken. Individuele documenten zijn georganiseerd in collecties, die op hun beurt worden opgeslagen in databases. Omdat het schema van elk document niet wordt gedefinieerd door een statisch schema, bieden documentgebaseerde systemen meer flexibiliteit dan relationele systemen die zijn samengesteld uit tabellen en records.
In deze handleiding zullen we het hebben over het maken en beheren van de structuren die MongoDB gebruikt om gegevens te ordenen. We bespreken hoe u databases maakt en beheert en vervolgens hoe u verzamelingen maakt om vergelijkbare of gerelateerde documenten te bewaren.
Bestaande databases bekijken
Voordat we beginnen met het maken van nieuwe databases, is het handig om vertrouwd te raken met enkele van de methoden die MongoDB biedt voor het vinden van informatie over bestaande databases. Dit kan u helpen de huidige status van het systeem te begrijpen voordat u wijzigingen aanbrengt.
Om alle databases op het systeem waar u toegang toe hebt weer te geven, gebruikt u de show dbs
methode:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
MongoDB zal reageren met de namen van alle toegankelijke databases op het systeem en een samenvatting van hun huidige opslagruimte.
Gebruik de db.getName()
. om te zien op welke database u momenteel werkt commando of zijn verkorte alias, db
:
db
test
Het kan zijn dat u momenteel een database gebruikt die niet werd vermeld door de show dbs
opdracht. Dit komt omdat in MongoDB, totdat u het eerste document naar de database schrijft, de database niet daadwerkelijk wordt gemaakt. Dus, in de voorbeelduitvoer hierboven, is de shell voorbereid om te werken op een test
database, maar aangezien deze nog niet bestaat, wordt deze niet geretourneerd door de show dbs
commando.
Om over te schakelen naar een andere database, kunt u de use
. gebruiken commando:
use admin
switched to db admin
Om wat basisinformatie over uw huidige database te krijgen, kunt u de db.stats()
. gebruiken methode:
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}
De uitvoer toont informatie over het aantal collecties in de database, opslagstatistieken, indexinformatie en meer.
Hoe databases te maken
MongoDB heeft geen expliciete opdracht voor het maken van een nieuwe database. In plaats daarvan, zoals eerder vermeld, moet u in plaats daarvan aan MongoDB aangeven dat u nieuwe documenten naar een nieuwe database wilt schrijven. Wanneer die documenten zijn gemaakt, zullen ze impliciet de database maken.
Om MongoDB voor te bereiden om naar een nieuwe database te schrijven, geeft u de use
commando om over te schakelen naar een niet-bestaande database.
Hier zullen we MongoDB instellen om een nieuwe database te maken met de naam playground
:
use playground
switched to db playground
Als u uw huidige database controleert, zal deze bevestigen dat de playground
database is momenteel het doelwit van database-gerelateerde commando's:
db
playground
Echter, zoals eerder vermeld, aangezien we nog geen documenten hebben aangemaakt, is de database zelf nog niet aangemaakt:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Om de nieuwe database daadwerkelijk te maken, moeten we eerst iets maken.
Hoe de collecties in een database te bekijken
In MongoDB, verzamelingen zijn structuren die worden gebruikt om documenten te groeperen met behulp van welk categorisatiesysteem u ook wilt implementeren. Ze leven in databases en slaan documenten op.
U kunt de beschikbare collecties zien in de database die u momenteel gebruikt met behulp van de show collections
methode.
Hier schakelen we over naar de admin
database die enkele collecties beschikbaar heeft om te demonstreren:
use adminshow collections
system.rolessystem.userssystem.version
U kunt ook dezelfde collectienamen in een array ophalen met de db.getCollectionNames()
methode:
db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]
Gebruik de db.getCollectionInfos()
om aanvullende informatie over de collecties in de huidige database weer te geven. methode:
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_" } }]
U kunt optioneel ook een document doorgeven aan de opdracht om de resultaten te filteren. Als u bijvoorbeeld alleen geïnteresseerd bent in het zien van de informatie over de system.version
collectie, zou je kunnen typen:
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_" } }]
Om te controleren hoeveel documenten een collectie bevat, gebruikt u de db.<collection>.count()
methode. Het volgende commando controleert bijvoorbeeld hoeveel documenten zich in de system.users
bevinden collectie:
db.system.users.count()
2
Om basisstatistieken over de collecties in de huidige database te bekijken, gebruikt u de db.printCollectionStats()
methode:
db.printCollectionStats()
De opdracht kan meer informatie opleveren dan u gemakkelijk kunt consumeren, maar bevat, maar is nuttig in sommige scenario's waarin u de kenmerken van een verzameling grondig moet bekijken.
Verzamelingen maken
Er zijn twee opties om een nieuwe collectie aan te maken:je kunt ofwel impliciet ofwel expliciet collecties maken.
Net als bij databases kan MongoDB automatisch collecties maken wanneer er voor het eerst een document naar wordt geschreven. Deze methode vertelt MongoDB om een nieuwe collectie te maken door een document in te voegen in een collectie die nog niet bestaat.
We kunnen bijvoorbeeld teruggaan naar de playground
database waarin we eerder geïnteresseerd waren. Als we eenmaal in die naamruimte zijn, kunnen we een nieuw document in een verzameling invoegen door de insert.()
aan te roepen. commando op de naam die we willen gebruiken voor de nieuwe collectie. Hier kunnen we een document maken over een dia in een nieuwe verzameling genaamd equipment
:
use playgrounddb.equipment.insert({name: "slide"})
switched to db playgroundWriteResult({ "nInserted" : 1 })
De uitvoer geeft aan dat één document is geschreven. De bovenstaande opdracht voerde drie afzonderlijke acties uit. Eerst creëerde MongoDB de playground
database waarnaar we hadden verwezen in onze use
opdracht. Het creëerde ook de equipment
verzameling binnen de database omdat we de insert()
. aanroepen commando op die collectienaam. Ten slotte creëert het het eigenlijke document binnen de equipment
verzameling met behulp van de invoer die we hebben geleverd aan de insert()
commando.
U kunt controleren of al deze acties zijn uitgevoerd met de volgende opdrachten:
show dbsshow collectionsdb.equipment.count()db.equipment.find()
De uitvoer moet laten zien dat de playground
database is nu een van de vermelde databases, dat de equipment
collectie wordt vermeld, dat er één document is binnen de equipment
collectie, en dat het document de {name: "slide"}
. is document dat we in de opdracht hebben ingevoegd.
De andere optie die u kunt gebruiken om collecties te maken, is door expliciet de db.createCollection()
te gebruiken. methode. Hierdoor kunt u collecties maken zonder er documenten aan toe te voegen.
U kunt bijvoorbeeld een nieuwe collectie maken in de playground
database genaamd maintenance.requests
door te typen:
db.createCollection("maintenance.requests")
{ "ok" : 1 }
We kunnen verifiëren dat de nieuwe collectie verschijnt wanneer we ernaar vragen, maar dat er geen documenten zijn:
show collectionsdb.maintenance.requests.count()
equipmentmaintenance.requests0
De db.createCollection()
methode is vooral handig omdat u hiermee verschillende opties kunt specificeren bij het maken. We willen bijvoorbeeld een afgetopte verzameling maken , een verzameling die een bovenlimiet handhaaft voor de toegewezen grootte die wordt opgeslagen door het oudste document te verwijderen wanneer het vol is.
Een gelimiteerde verzameling maken met de naam notifications
die maximaal 10240 bytes aan informatie kan opslaan, kunt u bellen:
db.createCollection( "notifications", { capped: true, size: 10240 })
{ "ok" : 1}
Dit zal een gelimiteerde notification
maken verzameling, die we kunnen verifiëren door te typen:
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_" } }]
Collecties verwijderen
Om een verzameling te verwijderen, kunt u de drop()
. gebruiken methode op de collectie zelf.
Om bijvoorbeeld de afgetopte notifications
te verwijderen collectie die we hebben gemaakt, kunt u typen:
db.notifications.drop()
true
U kunt controleren of de bewerking is geslaagd door de collecties opnieuw in de huidige database op te nemen:
show collections
equipmentmaintenance.requests
Hoe databases te verwijderen
Om een hele database te verwijderen, roept u de db.dropDatabase()
. aan opdracht. Hiermee wordt de huidige database verwijderd, dus zorg ervoor dat u zich in de juiste database bevindt voordat u het volgende uitvoert:
use playgrounddb.dropDatabase()
switched to db playground{ "dropped" : "playground", "ok" : 1 }
Als je de lijst met beschikbare databases bekijkt, playground
wordt niet meer weergegeven:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Aangezien we nog niet zijn overgeschakeld naar een nieuwe database, is MongoDB nog steeds ingesteld om een playground
te maken database moeten we ervoor kiezen om een nieuwe collectie of document toe te voegen. U kunt dit verifiëren met de db
commando:
db
playground
Conclusie
Het maken en beheren van databases en collecties is een belangrijke vaardigheid bij het gebruik van MongoDB. Met deze elementaire organisatiehulpmiddelen kunt u gerelateerde documenten groeperen, subsets van informatie opvragen en autorisatiebeleid instellen voor verschillende soorten gegevens. Door vertrouwd te raken met hoe u deze structuren effectief kunt beheren, kunt u uw gegevens effectiever beheren met minder verrassingen.