sql >> Database >  >> NoSQL >> MongoDB

Databases en collecties beheren in MongoDB


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.




  1. Mongodb-shellscript uitvoeren via C#-stuurprogramma

  2. Hoe AppArmor configureren voor MongoDB-replicasets?

  3. Dupliceer een document in MongoDB met een nieuwe _id

  4. Redis Pub Sub-kanaalgeheugen