Iniciando com o MongoDB
O que é o MongoDB?
MongoDB é um banco de dados NoSQL, ou seja, não relacional. Ele é um banco de dados orientado a documentos, guardando os dados em objetos com um formato baseado em JSON.
Esses documentos são armazenados em coleções, que são agrupamentos de documentos. Por sua vez, essas coleções são armazenadas em bancos de dados.
graph LR
A["Banco de dados | Database"]
A --> C["Coleção | Collection"]
C --> D["Documento | Document"]
📄 Documentos
Os documentos são objetos JSON que são armazenados no MongoDB.
Na verdade não é um JSON puro, o Mongo usa um formato binário chamado BSON, esse formato adiciona alguns tipos de dados que não existem no JSON, como por exemplo, o tipo Date. Geralmente não trabalhamos com BSON diretamente, ao invés disso usamos objetos nativos da linguagem de programação que estamos usando.
Um exemplo de documento seria:
{
"_id": "algum_id",
"name": "João",
"age": 20,
"hobbies": ["truco", "jardinagem"],
"address": {
"street": "Logo ali",
"number": 123
}
}
Vantagens:
- Não precisa de um esquema pré-definido
- É fácil de escalar horizontalmente (basta adicionar mais servidores)
- Documentos correspondem a objetos nativos do JavaScript e em muitas linguagens de programação
- Documentos embutidos reduzem o número de consultas necessárias
Sobre os nomes dos campos
Os nomes de campos são strings que designam um valor. O nome do campo não pode ser vazio.
O nome do campo
_id
é reservado para o identificador único do documento. O identificador único é obrigatório e deve ser único para cada documento em uma coleção. O identificador único pode ser de qualquer tipo, mas é comumente uma string ou um número inteiro.
Limites de tamanho
Um objeto BSON pode ter no máximo 16 megabytes (MB). A maioria dos documentos não chega nem perto desse limite, mas se você estiver trabalhando com documentos muito grandes, talvez seja necessário considerar um design alternativo.
“Ah, mas eu quero guardar blobs gigantes de 100MB no MongoDB” - Você, provavelmente
Para isso, o MongoDB tem um tipo de dado chamado BinData
, que é um array de bytes. Você pode usar esse tipo de dado para guardar blobs grandes. Neste caso o Mongo não vai guardar todo o seu blob em um único documento, ele vai dividir em vários documentos menores de 255 Kilobytes (KB).
Considere também a possibilidade de guardar o seu blob em um serviço de armazenamento de arquivos, como o Amazon S3, e guardar apenas o link para o arquivo no MongoDB.
👉 Você poder saber mais sobre isso clicando aqui 👈
Ordem de campos
- O campos são ordenados
- Pode ocorrer reordenação dos campos durante leitura, então você não deve confiar na ordem dos campos
- Durante escrita a ordem dos campos é preservada, com exceção do campo
_id
, que sempre é o primeiro campo - Updates que renomeiam campos podem causar reordenação dos campos
Aprenda mais sobre documentos no MongoDB na documentação
📖 Coleções
Coleções são agrupamentos de documentos. Elas são análogas às tabelas em bancos de dados relacionais.
Você pode criar uma coleção usando o método createCollection
:
db.createCollection("users");
Se você tentar inserir um documento em uma coleção que não existe, o MongoDB vai criar a coleção automaticamente.
Uma coleção não precisa ter um Schema, mas se você quiser validar os dados durante uma insert
ou update
, você pode definir um.
Aprenda mais sobre validação de schems na documentação
“Vixe! Antes eu só guardava nome e email na coleção de usuários, agora preciso adicionar senha… Como faço?” - Algum desenvolvedor esquecido
Você vai ter que atualizar todos os documentos da coleção para adicionar o campo senha. Você pode fazer isso usando o método updateMany
:
db.updateMany(
// Query (vazio para aplicar a todas as coleções)
{},
// Update
{
$set: {
password:
"que valor você colocaria para algo sensível assim eu num sei... talvez null?",
},
},
);
TODO
Query API
- CRUD operations
- Aggregation pipeline
- Combinar dados de coleções diferentes
- Full text search
Data modeling
- Modelagem de dados
- Modelagem de relacionamentos
- Referências
Transactions
Indexes
Mongoose