Pular para o conteúdo
Cursos

DevClub

LógicaFront-endBack-endMobile

IA Club

IA na prática
Estudar programaçãoEstudar IA

Aula 3 de 6

CRUD no MongoDB: criar, ler, atualizar e remover

Pratique as quatro operações básicas do MongoDB, use filtros específicos e evite atualizações ou exclusões que alcancem documentos demais.

52 minutos · leitura + prática · nível iniciante

Ao terminar esta aula, você vai conseguir

  • Relacionar create, read, update e delete aos métodos do MongoDB
  • Atualizar campos com operadores sem substituir o documento
  • Conferir o alvo antes de alterar ou remover dados
Três documentos independentes guardam nome e estado ativo.

CRUD reúne quatro operações: create, read, update e delete. Em português, criar, ler, atualizar e remover. Nesta aula, você vai ligar cada ação a métodos do MongoDB e adotar uma regra de segurança: tornar o alvo visível antes de executar uma escrita.

Pense numa ficha de matrícula. Você abre uma ficha nova, consulta uma existente, corrige um campo ou cancela a ficha. O identificador garante que a mudança chegue à pessoa certa. No MongoDB, o documento ocupa esse papel e o filtro escolhe quais documentos participam. A analogia termina aí: uma operação pode atingir muitos documentos de uma vez, e uma remoção no banco não vai para uma lixeira automática.

Crie e leia a confirmação

No mongosh, a criação de um curso pode usar insertOne:

javascript
const resultado = db.cursos.insertOne({
  titulo: 'JavaScript essencial',
  status: 'rascunho',
  vagas: 30
})

resultado.insertedId

O resultado traz o _id inserido. Guarde ou use esse identificador para confirmar a leitura:

javascript
db.cursos.findOne({ _id: resultado.insertedId })

findOne devolve um documento ou null. Essa diferença importa: null indica que nenhum documento correspondeu ao filtro, não que houve uma lista vazia. Em uma API, essa situação costuma virar resposta 404; falha de conexão é outro tipo de erro e não deve ser tratada como “não encontrado”.

Atualize campos com operadores

Para publicar o curso sem substituir os demais campos, use $set:

javascript
db.cursos.updateOne(
  { _id: resultado.insertedId },
  { $set: { status: 'publicado' } }
)

O primeiro documento é o filtro; o segundo descreve a atualização. Um erro reproduzível é esquecer o operador e tentar updateOne({ _id }, { status: 'publicado' }). Em atualizações desse tipo, o servidor exige operadores atômicos e rejeita o documento de atualização. Se a intenção fosse substituir tudo, existiria replaceOne, mas os campos omitidos seriam perdidos.

Confira matchedCount e modifiedCount. Um documento pode ser encontrado sem ser modificado, por exemplo quando status já tem o valor pedido. Esses números respondem perguntas diferentes e ajudam a não anunciar uma mudança inexistente.

Escolha conscientemente entre os sufixos One e Many. updateOne altera no máximo um documento correspondente; updateMany percorre todos os correspondentes. O nome do método é parte da intenção, mas o filtro continua decisivo. Para publicar uma turma específica, combine identificador e estado. Para arquivar todos os cursos encerrados, um filtro por data pode justificar a operação em lote. Antes, conte e amostre os documentos atingidos.

Existe também a opção upsert, que insere quando nenhum documento corresponde. Ela é útil quando a regra realmente é “atualize ou crie”, mas perigosa como atalho. Um erro de digitação no filtro pode criar uma segunda entidade em vez de revelar que a primeira não foi encontrada. Use chave única e confira upsertedId quando esse comportamento fizer parte do requisito.

Remova com um filtro que você consegue explicar

Primeiro faça a leitura, depois a exclusão:

javascript
const filtro = { _id: resultado.insertedId, status: 'rascunho' }

db.cursos.findOne(filtro)
db.cursos.deleteOne(filtro)

Incluir o estado esperado evita remover um curso que outra ação já publicou. deleteOne({}) removeria algum documento correspondente ao filtro vazio; já deleteMany({}) alcançaria a coleção inteira. Nunca use filtro vazio por conveniência. Em dados importantes, pense também em permissão, backup, auditoria e numa estratégia de arquivamento.

Em chamadas de aplicação, trate falhas separadamente. Uma contagem zero é um resultado válido; timeout, falta de permissão e documento inválido são erros. Misturá-los numa única mensagem “não deu certo” impede o usuário de corrigir a entrada e impede a equipe de diagnosticar a infraestrutura.

O laboratório desta aula é somente um simulador didático de filtros JSON. Ele não escreve, não persiste e não representa concorrência ou confirmação de um servidor MongoDB. Use $ne para ocultar arquivados e depois refine com {"titulo":"CSS responsivo"}. O resultado deve cair de três para um.

Sua missão é escrever as quatro operações para um curso de teste e, depois de cada uma, anotar a prova esperada: _id criado, documento lido, contagem modificada ou contagem removida. Na próxima aula, vamos ampliar os filtros sem perder essa disciplina de prever o resultado.

Laboratório ao vivo

Confira o alvo antes da escrita

Filtre os itens não arquivados e refine até um único título. O simulador só lê JSON no navegador; não executa insert, update ou delete em MongoDB real.

Pronto para testar

Resultado

Pare e pense

Qual prática reduz o risco antes de um updateMany ou deleteMany?

Escolha uma resposta
Missão da aula

Faça sem copiar

Escreva insertOne, findOne, updateOne com $set e deleteOne para um curso de teste. Em cada operação, defina como confirmar o resultado sem usar filtro vazio.

Fontes para consultar

Terminou a missão?

Marque apenas quando você conseguir explicar o conceito e concluir o desafio. O progresso fica salvo somente neste navegador.

Próxima: Consultas MongoDB com filtros, projeção e paginação →