[Parte 1] Do MySQL para o MongoDB: Comandos básicos
Tags: mongodb, nosql, database, mysql
Published: 2021-02-03 01:48:11

---
title: [Parte 1] Do MySQL para o MongoDB: Comandos básicos
published: true
description: Migrando do relacional para o não-relacional
tags: mongodb, nosql, database, mysql
---

Chegou a hora de migrar para o MongoDB e você só sabe SQL...

<img width="100%" style="width:100%" src="https://media1.tenor.com/images/94ec8e77f201109a234ae494b82bb514/tenor.gif?itemid=4988274">

Relaaxa!!

Abaixo mostro alguns comandos para você começar no mundo do MongoDB 🤩

## Criando uma tabela de usuário

MySQL
``` sql
CREATE TABLE `usuario` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(125) NOT NULL,
  `email` varchar(125) NOT NULL,
   PRIMARY KEY (`id`)
);
```

MongoDB
```js
// simplesmente

db.createCollection('usuario');

// OU com validação

db.createCollection('usuario', {
  validator: { 
    $jsonSchema: {
      bsonType: "object",
      required: [ "nome", "email" ],
      properties: {
        nome: {
          bsonType: "string",
          description: "deve ser uma string e é obrigatório"
        },
        email: {
          bsonType : "string",
          pattern : "@querodelivery\.com$",
          description: "deve ser uma string e corresponder ao padrão de expressão regular"
        }
      }
    }
  }
})
```

> 💡Por padrão o MongoDB cria uma chave primária `_id`, do tipo [ObjectId](https://docs.mongodb.com/manual/reference/method/ObjectId/)

___

## Criando um novo usuário

MySQL
``` sql
INSERT INTO usuario(nome, email) VALUES ('Wender Machado', 'wender.machado@querodelivery.com');
```

MongoDB
```js
db.usuario.insert({
  nome:"Wender Machado",
  email: "wender.machado@querodelivery.com"
});
```

___

## Buscando um usuário pelo id

MySQL
``` sql
SELECT nome FROM usuario WHERE id = 1
```

MongoDB
```js
db.usuario.findOne(
  { 
    _id: ObjectId("5f9c62df2a455224b988809a")
  },
  {
    nome: 1, // irá retornar apenas o nome
    email: 0 // não irá retornar o email
  })
```

> 💡No segundo parametro (projeção) também é possível renomear chaves, além de criar novos valores dinamicamente como por exemplo duas informações concatenadas. 

___

## Buscando usuários pelo nome

MySQL
``` sql
SELECT id FROM usuario WHERE nome like 'Wender%'
```

MongoDB
```js
db.usuario.find({ nome: { $regex: /Wender*/i } })
```

___

## Paginando um resultado

MySQL
``` sql
SELECT id, nome, email FROM usuario LIMIT 20 OFFSET 10;
```

MongoDB
```js
db.usuario.find({ nome: { $regex: /Wender*/i } }).skip(10).limit(20)
```

___

## Atualizando um usuário

MySQL
``` sql
UPDATE usuario SET nome = 'Wender Pinto Machado' WHERE id = 1;
```

MongoDB
```js
db.usuario.updateOne(
  { _id: ObjectId("5f9c62df2a455224b988809a") }, // quem será alterado
  { $set: { nome: 'Wender Pinto Machado' } } // o que será alterado
)
```

___

## Removendo um usuário

MySQL
``` sql
DELETE FROM usuario WHERE id = 1
```

MongoDB
```js
db.usuario.remove({ _id: ObjectId("5f9c62df2a455224b988809a") })
```

________

Além desses operadores, existem vááários outros que você encontra no menu [Operator](https://docs.mongodb.com/manual/reference/operator/) da documentação oficial.

E para realizar consultas mais robustas, temos o [Aggregation](https://docs.mongodb.com/manual/aggregation/), que irei abordar nos próximos posts.

<img width="100%" style="width:100%" src="https://media1.tenor.com/images/0edd53dd2110147b786329c2e24fb1d0/tenor.gif?itemid=5795910">

🔹🔹🔹🔷🔹🔹🔹

E ai, curtiu o post? 😃

Não deixe de seguir:
- [o dev.to da QueroDelivery](https://dev.to/querodelivery)
- [o meu dev.to](https://dev.to/wenderpmachado)
- [o meu instagram - @wenderpmachado](https://www.instagram.com/wenderpmachado/)

<img width="50%" style="width:50%" src="https://media1.tenor.com/images/1bfcf3fd1e93c56871f41a71ba1b93c9/tenor.gif?itemid=19935273">