Въведение
MongoDB използва документно-ориентирани структури за съхранение, управление и обработка на данни. Отделните документи са организирани в колекции, които от своя страна се съхраняват в бази данни. Тъй като схемата на всеки документ не е дефинирана от статична схема, системите, базирани на документи, предлагат по-голяма гъвкавост от релационните системи, които са съставени от таблици и записи.
В това ръководство ще говорим за това как да създаваме и управляваме структурите, които MongoDB използва за организиране на данни. Ще разгледаме как да създаваме и управляваме бази данни и след това как да създаваме колекции, които да съхраняват подобни или свързани документи.
Как да преглеждате съществуващи бази данни
Преди да започнем да създаваме нови бази данни, е полезно да се запознаете с някои от методите, които MongoDB предоставя за намиране на информация за съществуващи бази данни. Това може да ви помогне да разберете текущото състояние на системата, преди да започнете да правите промени.
За да покажете всички бази данни в системата, до които имате достъп, използвайте show dbs
метод:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
MongoDB ще отговори с имената на всички достъпни бази данни в системата, както и с обобщение на текущото им пространство за съхранение.
За да видите с коя база данни сте настроени да работите в момента, използвайте db.getName()
команда или нейния съкратен псевдоним, db
:
db
test
Може да откриете, че в момента използвате база данни, която не е посочена от show dbs
команда. Това е така, защото в MongoDB, докато не напишете първия документ в базата данни, базата данни всъщност не е създадена. И така, в изходния пример по-горе, обвивката е подготвена да работи на test
база данни, но тъй като тя все още не съществува, тя няма да бъде върната от show dbs
команда.
За да превключите към друга база данни, можете да използвате use
команда:
use admin
switched to db admin
За да получите основна информация за текущата си база данни, можете да използвате db.stats()
метод:
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}
Резултатът показва информация за броя на колекциите в базата данни, статистически данни за съхранение, информация за индекси и други.
Как се създават бази данни
MongoDB няма изрична команда за създаване на нова база данни. Вместо това, както споменахме по-рано, трябва да посочите на MongoDB, че искате да пишете нови документи в нова база данни. Когато тези документи бъдат създадени, те имплицитно ще създадат базата данни.
За да подготвите MongoDB да пише в нова база данни, пуснете use
команда за превключване към несъществуваща база данни.
Тук ще настроим MongoDB за създаване на нова база данни, наречена playground
:
use playground
switched to db playground
Ако проверите текущата си база данни, тя ще потвърди, че playground
базата данни в момента е целта на свързаните с базата данни команди:
db
playground
Въпреки това, както споменахме по-горе, тъй като все още не сме създали никакви документи, самата база данни все още не е създадена:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
За да създадем действително новата база данни, ще трябва първо да създадем нещо.
Как да преглеждате колекциите в база данни
В MongoDB, колекции са структури, използвани за групиране на документи заедно, използвайки каквато и да е система за категоризация, която искате да приложите. Те живеят в бази данни и съхраняват документи.
Можете да видите наличните колекции в базата данни, която използвате в момента, като използвате show collections
метод.
Тук ще преминем към admin
база данни, която има налични колекции за демонстрация:
use adminshow collections
system.rolessystem.userssystem.version
Като алтернатива можете да извлечете същите имена на колекции в масив с помощта на db.getCollectionNames()
метод:
db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]
За да покажете допълнителна информация за колекциите в текущата база данни, използвайте db.getCollectionInfos()
метод:
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_" } }]
Можете също така по избор да предадете документ на командата, за да филтрирате резултатите. Например, ако се интересувате само да видите информацията за system.version
колекция, можете да въведете:
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_" } }]
За да проверите колко документи съдържа една колекция, използвайте db.<collection>.count()
метод. Например, следната команда проверява колко документа има в system.users
колекция:
db.system.users.count()
2
За да видите основни статистически данни за колекциите в текущата база данни, използвайте db.printCollectionStats()
метод:
db.printCollectionStats()
Командата може да изведе повече информация, отколкото можете лесно да консумирате, но съдържа, но е полезна в някои сценарии, при които трябва да разгледате задълбочено характеристиките на колекция.
Как се създават колекции
За да създадете нова колекция, има две опции:можете да създавате колекции или имплицитно, или изрично.
Както при базите данни, MongoDB може автоматично да създава колекции при първото написване на документ в тях. Този метод казва на MongoDB да създаде нова колекция, като вмъкне документ в колекция, която все още не съществува.
Например, можем да се върнем обратно към playground
база данни, която ни интересуваше по-рано. След като сме в това пространство от имена, можем да вмъкнем нов документ в колекция, като извикаме insert.()
команда за името, което бихме искали да използваме за новата колекция. Тук можем да създадем документ за слайд в нова колекция, наречена equipment
:
use playgrounddb.equipment.insert({name: "slide"})
switched to db playgroundWriteResult({ "nInserted" : 1 })
Резултатът показва, че е написан един документ. Горната команда изпълни три отделни действия. Първо, MongoDB създаде playground
база данни, която сме посочили в нашата use
команда. Той също така създаде equipment
колекция в базата данни, тъй като ние извикваме insert()
команда за името на колекцията. И накрая, той създава действителния документ в equipment
колекция с помощта на входа, който предоставихме на insert()
команда.
Можете да проверите дали всички тези действия са извършени със следните команди:
show dbsshow collectionsdb.equipment.count()db.equipment.find()
Резултатът трябва да покаже, че playground
база данни вече е сред изброените бази данни, че equipment
колекция е посочена, че има един документ в рамките на equipment
колекция и че документът е {name: "slide"}
документ, който вмъкнахме в командата.
Другата опция, която да използвате за създаване на колекции, е изрично да използвате db.createCollection()
метод. Това ви позволява да създавате колекции, без да добавяте документи към тях.
Например, можете да създадете нова колекция в playground
база данни, наречена maintenance.requests
като напишете:
db.createCollection("maintenance.requests")
{ "ok" : 1 }
Можем да проверим дали новата колекция се показва, когато я потърсим, но че няма документи:
show collectionsdb.maintenance.requests.count()
equipmentmaintenance.requests0
db.createCollection()
методът е полезен преди всичко, защото ви позволява да зададете различни опции при създаването. Например, може да искаме да създадем ограничена колекция , която е колекция, която поддържа горна граница на разпределения си размер, който съхранява, като изтрива най-стария си документ, когато е пълен.
За да създадете ограничена колекция, наречена notifications
който може да съхранява най-много 10240 байта информация, можете да извикате:
db.createCollection( "notifications", { capped: true, size: 10240 })
{ "ok" : 1}
Това ще създаде ограничено notification
колекция, която можем да проверим, като напишем:
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_" } }]
Как да изтриете колекции
За да изтриете колекция, можете да използвате drop()
метод върху самата колекция.
Например, за да премахнете ограничените notifications
колекция, която създадохме, можете да въведете:
db.notifications.drop()
true
Можете да проверите дали операцията е била успешна, като изброите отново колекциите в текущата база данни:
show collections
equipmentmaintenance.requests
Как да изтриете бази данни
За да изтриете цяла база данни, извикайте db.dropDatabase()
команда. Това ще изтрие текущата база данни, така че се уверете, че сте в правилната база данни, преди да изпълните:
use playgrounddb.dropDatabase()
switched to db playground{ "dropped" : "playground", "ok" : 1 }
Ако проверите списъка с налични бази данни, playground
вече не се показва:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Тъй като все още не сме преминали към нова база данни, MongoDB все още е настроен да създаде playground
база данни, ако изберем да добавим нова колекция или документ. Можете да проверите това с db
команда:
db
playground
Заключение
Създаването и управлението на бази данни и колекции е важно умение при използване на MongoDB. Тези основни организационни инструменти ви позволяват да групирате свързани документи заедно, да правите заявки за подмножества от информация и да настроите политики за оторизация за различни типове данни. Запознаването с това как да управлявате ефективно тези структури ще ви позволи да управлявате данните си по-ефективно с по-малко изненади.