Introdução ao MongoDB e operações de CRUD
Tags: mongodb, beginners, database
Published: 2020-07-07 18:08:05

Estarei usando esse site como registro dos meus estudos, a intensão é totalmente fixar o conteúdo aprendido! 

<!-- Links de referência:
https://www.luiztools.com.br/post/tutorial-mongodb-para-iniciantes-em-nosql-2/ 
https://tecadmin.net/tutorial/mongodb/mongodb-tutorials/
https://docs.mongodb.com/manual/introduction/
-->

Primeira coisa que tem que entender sobre o MongoDB é o conceito, entender a lógica de um banco de dados _não_ relacional.

A *[Documentação](https://docs.mongodb.com/manual)* do MongoDB é incrível, eu consegui entender super bem por lá, precisando ver pequenas coisas por fora.

Se você é como eu, que tem o conceito de banco de dados relacional muito fixo e não entendeu de primeira a maneira na qual o não relacional funciona recomendo ver essa parte da documentação do MongoDB, [Comparação com SQL](https://docs.mongodb.com/manual/reference/sql-comparison/).

## ✨ Características: 
- Os dados são organizados em funções;
- Documento definido por um objeto, tendo o formato de campo:valor;
- Não existe tabelas, sim collections;
- As collections não tem contains (PK, FK), transações e também não tem as limitações das tabelas relacionais;
- Composto por documentos, esses documentos são em formato JSON;
- Os documentos são agrupados em _collections_;
- O conjunto de _collections_ formam um _database_;
- Collection é um conjunto de dados;

## ✨ **Fluxo de acesso**

#### Para visualizar todos os documentos existentes.
Comando : ``  > show databases  ``

#### Para colocar em uso _caso exista_, senão, ele é automaticamente criado.
Comando: ``  > use estudos  ``

_**OBS.:** a collection só oficialmente criada após a inserção de um registro_

#### Para visualizar as collections.
Comando: ``  > show collections ``

#### Para visualizar em qual documento você está.
Comando: ``  > db  ``

## ✨ **Operações de CRUD**

#### São funções que fazem as operações, como por exemplo: `` insert() ``, `` find() ``, `` findOne() ``, `` update() `` e `` delete() ``;

### Create

`` > use <nome-collection>``

- Esse comando serve para criar o banco, mas só será oficialmente criado com a inserção do primeiro registro.

### Read

- Esse comando serve para visualizar os registros da sua collection (apenas os 20 primeiros).
Comando: `` > db.<nome-collection>.find()  ``

- Visualizar em formato JSON.
Comando:  `` > db.<nome-collection>.find().pretty()``;

- Ver um registro em específico.
Comando: `` > db.<nome-collection>.find({ <nome-campo> : <valor> }) ``
Pode-se usar o parâmetro ``pretty()`` sempre que quiser ver em formato JSON.

### Insert

- Adicionar um único registro em sua collection definida:
Comando: `` > db.<nome-collection>.insert({ campo:valor }) ``

- Há duas opções de como adicionar vários registros em sua collection definida:

1ª opção: Usando um array para inserir os registros, logo em seguida adicionar o array no parâmetro insert:
Comando: 
`` > addArray = [ { campo:valor}, { campo:valor}, {campo:valor}, { campo: [ {campo:valor }, {campo:valor } ] } ] ``
`` > db.<nome-collection>.insert(addArray) ``

2ª opção: Usar a função `` insertMany() ``:
Comando: `` db.<nome-collection>.insertMany([ { campo:valor, campo:valor, campo:valor }, { campo:valor, campo:valor, campo:valor } ] ) ``

### Update

Importante lembrar que, a função update pode ser muito perigosa, podendo apagar registros de seu documento, então atente-se as regras de "segurança".

- Atualizando um único registro em sua collection definida, usando o __id_ como filtro, pois é um registro único:
Comando: `` > db.<nome-collection>.updateOne({ _id: ObjectId("5eeed2755cda39dc20cb990c")}, {$set: {campo:valor}}) ``

- O operador $set irá sobrescrevê-lo, sendo atualizado.
- Existem outras funções de update como, `` update() ``, `` updateMany() `` e `` upsert() ``.

_**OBS.:**_
_- Cada ObjectId() é diferente então para encontrar o seu use o comando `` > db.<nome-collection>.find() ``;_
_- Se for atualizar um campo que não existe ele será automaticamente criado._

### Delete

Seguindo a lógica das funções do ``update()``, temos duas opções de como deletar um registro, usando ``deleteOne()`` ou ``deleteMany()``.

- Para apagar todos os registros com um campo especifico:
``> db.<nome-collection>.deleteOne({campo:valor})``

Caso queira deletar um registro em especifico não se esqueça de utilizar o ``ObjectId()``.

Fim! :D