MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como gerenciar bancos de dados e coleções no MongoDB


Introdução


O MongoDB usa estruturas orientadas a documentos para armazenar, gerenciar e processar dados. Documentos individuais são organizados em coleções, que por sua vez, são armazenadas em bancos de dados. Como o esquema de cada documento não é definido por um esquema estático, os sistemas baseados em documentos oferecem mais flexibilidade do que os sistemas relacionais compostos de tabelas e registros.

Neste guia, falaremos sobre como criar e gerenciar as estruturas que o MongoDB usa para organizar os dados. Abordaremos como criar e gerenciar bancos de dados e, em seguida, como fazer coleções para armazenar documentos semelhantes ou relacionados.


Como visualizar bancos de dados existentes


Antes de começarmos a criar novos bancos de dados, é útil se familiarizar com alguns dos métodos que o MongoDB fornece para encontrar informações sobre bancos de dados existentes. Isso pode ajudá-lo a entender o estado atual do sistema antes de começar a fazer alterações.

Para exibir todos os bancos de dados no sistema aos quais você tem acesso, use o comando show dbs método:
show dbs
admin   0.000GBconfig  0.000GBlocal   0.000GB

O MongoDB responderá com os nomes de todos os bancos de dados acessíveis no sistema, bem como um resumo de seu espaço de armazenamento atual.

Para ver em qual banco de dados você está configurado para operar, use o db.getName() comando ou seu alias abreviado, db :
db
test

Você pode descobrir que está usando um banco de dados que não foi listado pelo show dbs comando. Isso ocorre porque no MongoDB, até que você grave o primeiro documento no banco de dados, o banco de dados não é realmente criado. Assim, na saída de exemplo acima, o shell está preparado para operar em um test banco de dados, mas como ele ainda não existe, ele não será retornado pelo show dbs comando.

Para mudar para um banco de dados diferente, você pode usar o use comando:
use admin
switched to db admin

Para obter algumas informações básicas sobre seu banco de dados atual, você pode usar o db.stats() método:
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}

A saída mostra informações sobre o número de coleções no banco de dados, estatísticas de armazenamento, informações de índice e muito mais.


Como criar bancos de dados


O MongoDB não possui um comando explícito para criar um novo banco de dados. Em vez disso, como mencionado anteriormente, você deve indicar ao MongoDB que deseja gravar novos documentos em um novo banco de dados. Quando esses documentos são criados, eles criam implicitamente o banco de dados.

Para preparar o MongoDB para gravar em um novo banco de dados, execute o comando use comando para alternar para um banco de dados inexistente.

Aqui, vamos configurar o MongoDB para criar um novo banco de dados chamado playground :
use playground
switched to db playground

Se você verificar seu banco de dados atual, ele confirmará que o playground database é atualmente o alvo dos comandos relacionados ao banco de dados:
db
playground

No entanto, como mencionado anteriormente, como ainda não criamos nenhum documento, o banco de dados em si ainda não foi criado:
show dbs
admin   0.000GBconfig  0.000GBlocal   0.000GB

Para realmente criar o novo banco de dados, precisaremos criar algo primeiro.


Como visualizar as coleções em um banco de dados


No MongoDB, coleções são estruturas usadas para agrupar documentos usando qualquer sistema de categorização que você deseja implementar. Eles vivem dentro de bancos de dados e armazenam documentos.

Você pode ver as coleções disponíveis no banco de dados que está usando no momento usando o show collections método.

Aqui, vamos mudar para o admin banco de dados que tem algumas coleções disponíveis para demonstrar:
use adminshow collections
system.rolessystem.userssystem.version

Alternativamente, você pode recuperar os mesmos nomes de coleção em uma matriz usando o db.getCollectionNames() método:
db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]

Para mostrar informações adicionais sobre as coleções no banco de dados atual, use o db.getCollectionInfos() método:
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_"                }        }]

Você também pode opcionalmente passar um documento para o comando para filtrar os resultados. Por exemplo, se você estiver interessado apenas em ver as informações sobre o system.version coleção, você pode digitar:
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_"                }        }]

Para verificar quantos documentos uma coleção contém, use o db.<collection>.count() método. Por exemplo, o comando a seguir verifica quantos documentos estão no system.users coleção:
db.system.users.count()
2

Para visualizar estatísticas básicas sobre as coleções no banco de dados atual, use o db.printCollectionStats() método:
db.printCollectionStats()

O comando pode gerar mais informações do que você pode consumir facilmente, mas contém, mas é útil em alguns cenários em que você precisa examinar profundamente as características de uma coleção.


Como criar coleções


Para criar uma nova coleção, existem duas opções:você pode criar coleções de forma implícita ou explícita.

Assim como os bancos de dados, o MongoDB pode criar coleções automaticamente na primeira vez que um documento é gravado nelas. Este método diz ao MongoDB para criar uma nova coleção inserindo um documento em uma coleção que ainda não existe.

Por exemplo, podemos voltar para o playground banco de dados em que estávamos interessados ​​anteriormente. Quando estivermos nesse namespace, podemos inserir um novo documento em uma coleção chamando o método insert.() comando no nome que gostaríamos de usar para a nova coleção. Aqui, podemos criar um documento sobre um slide em uma nova coleção chamada equipment :
use playgrounddb.equipment.insert({name: "slide"})
switched to db playgroundWriteResult({ "nInserted" : 1 })

A saída indica que um documento foi gravado. O comando acima executou três ações separadas. Primeiro, o MongoDB criou o playground banco de dados que referenciamos em nosso use comando. Também criou o equipment coleção dentro do banco de dados, pois chamamos o método insert() comando nesse nome de coleção. Finalmente, ele cria o documento real dentro do equipment coleção usando a entrada que fornecemos para o insert() comando.

Você pode verificar se todas essas ações foram executadas com os seguintes comandos:
show dbsshow collectionsdb.equipment.count()db.equipment.find()

A saída deve mostrar que o playground banco de dados está agora entre os bancos de dados listados, que o equipment coleção está listada, que existe um documento dentro do equipement coleção e que o documento é o {name: "slide"} documento que inserimos no comando.

A outra opção a ser usada para criar coleções é usar explicitamente o db.createCollection() método. Isso permite que você crie coleções sem adicionar nenhum documento a elas.

Por exemplo, você pode criar uma nova coleção no playground banco de dados chamado maintenance.requests digitando:
db.createCollection("maintenance.requests")
{ "ok" : 1 }

Podemos verificar que a nova coleção aparece quando a consultamos, mas que não possui documentos:
show collectionsdb.maintenance.requests.count()
equipmentmaintenance.requests0

O db.createCollection() O método é útil principalmente porque permite especificar várias opções na criação. Por exemplo, podemos querer criar uma coleção limitada , que é uma coleção que mantém um limite superior em seu tamanho alocado que armazena excluindo seu documento mais antigo quando estiver cheio.

Para criar uma coleção limitada chamada notifications que pode armazenar, no máximo, 10240 bytes de informação, você poderia chamar:
db.createCollection(    "notifications",    {        capped: true,        size: 10240    })
{ "ok" : 1}

Isso criará uma notification limitada coleção, que podemos verificar 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_"                }        }]


Como excluir coleções


Para excluir uma coleção, você pode usar o drop() método na própria coleção.

Por exemplo, para descartar as notifications limitadas coleção que criamos, você pode digitar:
db.notifications.drop()
true

Você pode verificar se a operação foi bem-sucedida listando novamente as coleções no banco de dados atual:
show collections
equipmentmaintenance.requests


Como excluir bancos de dados


Para excluir um banco de dados inteiro, chame o método db.dropDatabase() comando. Isso excluirá o banco de dados atual, portanto, certifique-se de estar no banco de dados correto antes de executar:
use playgrounddb.dropDatabase()
switched to db playground{ "dropped" : "playground", "ok" : 1 }

Se você verificar a lista de bancos de dados disponíveis, playground não é mais exibido:
show dbs
admin   0.000GBconfig  0.000GBlocal   0.000GB

Como ainda não mudamos para um novo banco de dados, o MongoDB ainda está configurado para criar um playground banco de dados devemos optar por adicionar uma nova coleção ou documento. Você pode verificar isso com o db comando:
db
playground


Conclusão


Criar e gerenciar bancos de dados e coleções é uma habilidade importante ao usar o MongoDB. Essas ferramentas organizacionais básicas permitem agrupar documentos relacionados, consultar subconjuntos de informações e configurar políticas de autorização para diferentes tipos de dados. Familiarizar-se com o gerenciamento eficaz dessas estruturas permitirá que você gerencie seus dados de forma mais eficaz com menos surpresas.