DEV Community

Gabriel_Silvestre
Gabriel_Silvestre

Posted on

Introdução ao MongoDB

Tabela de Conteúdos


Estrutura do MongoDB

Classe

O que é?

Apesar de serem englobados dentro de um mesmo escopo, os banco de dados NoSQL possuem diferentes tipos de armazenamento, em outras palavras, são de classes diferentes.

Document

Não iremos abordar todos os tipo de classe NoSQL aqui, iremos focar apenas na classe do MongoDB, Document.

A classe Document é a mais flexível dentre todas, seu formato de armazenamento é similar ao JSON, no MongoDB por exemplo, esse formato é chamado de BSON. De forma prática iremos armazenar os dados no formato de um "Objeto JavaScript", onde temos chave:valor, sendo que cada valor poderá conter outro objeto e assim sucessivamente.

Qual é?

A estrutura "interna" do MongoDB consiste em três partes, que serão explicadas logo abaixo, são elas: os Bancos de Dados, as Coleções e os Documentos.

Voltar ao top


Bancos de Dados

O que são?

Assim como em DB relacionais, os NoSQL podem possuir mais de um banco de dados cada, ou seja, é onde iremos armazenar as Coleções.

A maior diferença entre Bancos de Dados SQL e MongoDB (além do funcionamento interno) é a capacidade de se "auto criar" um novo Banco de Dados conforme a necessidade, ou seja, ao realizarmos uma operação em um Banco de Dados que ainda não existe, ele será criado de forma automática para nós, incluindo a operação que acabamos de fazer.

Voltar ao top


Coleções

O que são?

Fazendo um paralelo aos DB relacionais, as Coleções seriam equivalentes as Tabelas, que por sua vez seriam responsáveis por armazenar Documentos.

Voltar ao top


Documentos

O que são?

São equivalentes as entidades de um DB relacional, o que seria armazenado em uma linha da Tabela, irá ser armazenado como um objeto BSON dentro da Coleção.

Voltar ao top


Regras

O que são?

São restrições aplicadas a criação de Tables/Collections e inserção de dados através de Entity/Document.

SQL x MongoDB

Diferente de Tabelas e Entidades dos bancos de dados relacionais, as Coleções e Documentos de um banco de dados como o MongoDB podem ser completamente livres de regras, logo podemos ter dentro de uma mesma Coleção, Documentos com estruturas extremamente diferentes.

Apesar de isso ser possível e não gerar nenhum tipo de erro interno no DB, ainda temos a opção de "regrar" a criação de Documentos, sendo que essa regra deverá ocorrer em nível de Documento e não de Coleção.

Obs: Podemos aplicar regras em níveis de Coleção, porém caso já existam Documentos salvos, as regras podem impactá-los.

Regrando

Para adicionar as restrições na criação de um novo documento utilizamos o Schema Validation, recurso nativo do MongoDB, esse que não será abordado aqui, porém a documentação é bem didática em sua explicação.

Documentação - Schema Validation

Voltar ao top


InsertOne()

O que é?

É um comando do MongoDB que permite a inserção de um novo Documento a uma Coleção, essa que não precisa existir previamente.

Sintaxe

A sintaxe desse comando é, de certa forma, similar a do JavaScript, mas não se engane, é um comando para ser utilizado no mongo shell (mongosh).

Para executarmos esse comando precisamos ter previamente selecionado um banco de dados do MongoDB, após isso utilizamos a palavra reservada db, seguida da Coleção a receber o Documento e por fim o comando insertOne() recebendo por parâmetro, em forma de Objeto (JSON), as informações do Documento.

use <nome do banco de dados>
db.<nome da coleção>.insertOne({ });
Enter fullscreen mode Exit fullscreen mode
use my-database
db.user.insertOne({ "name": "Gabriel", "age": 21 });
Enter fullscreen mode Exit fullscreen mode

Voltar ao top


InsertMany()

O que é?

É um comando para a inserção de múltiplos valores dentro de uma Coleção, sendo que por padrão esses valores são inseridos de forma ordenada, porém podemos alterar esse comportamento.

Quando inseridos de forma ordenada, os Documentos podem sofrer uma "parada" na inserção caso ocorra algum erro, dessa forma apenas os Documentos antes do erro ter ocorrido serão inseridos. Porém caso optemos por inserir de forma não ordenada, todos os Documentos que não gerarem erro serão inseridos, por mais que outros gerem.

Sintaxe

Esse comando é extremamente similar ao insertOne, com a única diferença que iremos passar nossos Documentos dentro de um Array.

use <nome do banco de dados>
db.<nome da coleção>.insertMany([{ }, { }]);
Enter fullscreen mode Exit fullscreen mode
use my-database
db.user.insertMany([{ "name": "Gabriel", "age": 21 }, { "name": "Daniela", "age": 23 }]);
Enter fullscreen mode Exit fullscreen mode

Voltar ao top


Find()

O que é?

É um comando para a pesquisa de Documentos, onde podemos aplicar filtros de busca, bem como definir o formato de retorno da busca.

Sintaxe

Assim como os comandos vistos anteriormente, esse também irá seguir uma sintaxe similar, utilizando o db seguido da Coleção e indicando o comando find() ao final, porém o comando em si pode receber até dois argumentos, sendo ambos em formato de JSON.

O primeiro argumento é um filtro de busca no qual pesquisamos os Documentos através de seus campos, para isso utilizamos um JSON, definindo a chave a ser usada no filtro e qual valor ela deverá ter.

O segundo argumento é uma "modelagem" do Documento encontrado, dessa forma podemos definir os campos que queremos que sejam retornados, ou ocultados, da busca realizada. Para definir que um campo deve ser retornado usamos seu nome seguido do número 1 e caso desejarmos ocultá-lo usamos o número 0.

use <nome do banco de dados>

db.<nome da coleção>.find();  # retorna todos os Documentos
db.<nome da coleção>.find({ });  # define apenas o "filtro"
db.<nome da coleção>.find({ }, { });  # define o "filtro" e o formato do retorno
Enter fullscreen mode Exit fullscreen mode
use my-database

db.my-database.find();
db.my-database.find({ });
db.my-database.find({ }, { });
Enter fullscreen mode Exit fullscreen mode

Voltar ao top


Operadores de Comparação

O que são?

Como o nome diz, são operadores que realizam comparações entre os valores, normalmente utilizados para a criação de filtros.

Sintaxe

Os Operadores de Comparação do MongoDB nada mais são do que "chaves reservadas", logo tudo que precisamos fazer é passar a chave para a comparação desejada e o valor a ser comparado.

A lista de chaves de comparação do MongoDB é relativamente extensa, então ela não será abordada aqui, porém recomendo a consulta da documentação.

Por fim para aplicarmos os Operadores de Comparação, basta escolhermos uma ação a ser feita como, pesquisa find por exemplo, e dentro do parâmetro de filtro utilizar os operadores.

use <nome do banco de dados>

db.<nome da coleção>.find({ });
Enter fullscreen mode Exit fullscreen mode
use my-database

db.my-database.find({ age: { $gt: 18 } });  # busca todos os Documentos que tenha a idade maior que 18
Enter fullscreen mode Exit fullscreen mode

Voltar ao top


Links Úteis

Voltar ao top

Top comments (0)