Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Learn why MongoDB was selected as a leader in the 2024 Gartner® Magic Quadrant™
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
TypeScriptchevron-right

Segurança de tipo com Prisma e MongoDB

Jesse Hall4 min read • Published Apr 25, 2022 • Updated Aug 09, 2024
MongoDBTypeScriptJavaScript
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Você sabia que o Prisma agora oferece suporte ao MongoDB? Neste artigo, veremos como usar o Prisma para se conectar ao MongoDB.

O que é o Prisma?

Prisma é um mapeador relacional de objetos (ORM) de código aberto para Node.js compatível com JavaScript e TypeScript. Ele realmente brilha ao usar o TypeScript, ajudando você a escrever um código que seja legível e seguro de digitar.
Se você quiser ouvir Nikolas Burk e Matthew Meuller do Prisma, confira este episódio do MongoDB Podcast.

Por que o Prisma?

Os esquemas ajudam os desenvolvedores a evitar problemas de inconsistência de dados ao longo do tempo. Embora você possa definir um esquema no nível do banco de dados no MongoDB, o Prisma permite definir um esquema no nível do aplicativo. Ao usar o Prisma Client, um desenvolvedor recebe o auxílio do preenchimento automático de queries, já que o Prisma Client está ciente do esquema.

Modelagem de dados

Geralmente, os dados doque são acessados juntos devem ser armazenados juntos em um banco de dados MongoDB. O Prisma oferece suporte ao uso de documentos incorporados para manter os dados juntos.
No entanto, pode haver casos de uso em que você precisará armazenar dados relacionados em coleções separadas. Para fazer isso no MongoDB, você pode incluir o campo _id de um documento em outro documento. Nesse caso, o Prisma pode ajudá-lo a organizar esses dados relacionados e manter a integridade referencial dos dados.

Prisma e MongoDB em ação

Vamos pegar um projeto de exemplo existente do repositório prisma-examples do Prisma.
Um dos exemplos é uma plataforma de gerenciamento de conteúdo de blog. Este exemplo usa um banco de dados SQLite. Vamos convertê-lo para usar o MongoDB e, em seguida, inserir alguns dados fictícios.
Se você quiser ver o código final, poderá encontrá-lo no repositório dedicado do Github.

Configuração do MongoDB Atlas

Neste artigo, usaremos um MongoDB Atlas cluster. Para criar uma conta gratuita e seu primeiro cluster gratuito para sempre, siga o guia Comece a usar o Atlas.

Configuração do Prisma

Primeiro, precisamos configurar nossa variável de ambiente para nos conectarmos ao banco de dados do MongoDB Atlas. Adicionarei minha string de conexão do MongoDB Atlas a um arquivo .env.
Exemplo:
1DATABASE_URL="mongodb+srv://<username>:<password>@<cluster>.mongodb.net/prisma?retryWrites=true&w=majority"
Você pode obter sua string de conexão no dashboard do Atlas.
Agora vamos editar o arquivo schema.prisma.
Se você estiver usando o Visual Studio Code, certifique-se de instalar a extensão oficial Prisma VS Code para ajudar com a formatação e o preenchimento automático.
Enquanto estiver no VS Code, instale também a extensão do MongoDB VS Code oficial para monitorar seu banco de dados diretamente no VS Code!
No objetodatasource db, definiremos o provedor como "mongodb" e o URL para nossa variável de ambiente DATABASE_URL.
Para o modelo User, precisaremos atualizar o id. Em vez de Int, usaremos String. Definiremos o padrão como auto(). Como o MongoDB nomeia o campo id _id, mapeamos o campo id para _id. Por último, diremos ao Prisma para usar o tipo de dados ObjectId para o campo id.
Faremos o mesmo com o modelo Post campo id. Também alteraremos o campo authorId para String e definiremos o tipo de dados como ObjectId.
1generator client {
2 provider = "prisma-client-js"
3}
4
5datasource db {
6 provider = "mongodb"
7 url = env("DATABASE_URL")
8}
9
10model User {
11 id String @id @default(auto()) @map("_id") @db.ObjectId
12 email String @unique
13 name String?
14 posts Post[]
15}
16
17model Post {
18 id String @id @default(auto()) @map("_id") @db.ObjectId
19 createdAt DateTime @default(now())
20 updatedAt DateTime @updatedAt
21 title String
22 content String?
23 published Boolean @default(false)
24 viewCount Int @default(0)
25 author User @relation(fields: [authorId], references: [id])
26 authorId String @db.ObjectId
27}
Esse esquema resultará em uma coleção separada User e Post no MongoDB. Cada publicação terá uma referência a um usuário.
Agora que temos nosso esquema configurado, vamos instalar nossas dependências e gerar nosso esquema.
1npm install
2npx prisma generate
Se você fizer alguma alteração posterior no esquema, precisará executar npx prisma generate novamente.

Crie e alimente o banco de dados MongoDB

Em seguida, precisamos alimentar nosso banco de dados. O repositório vem com um arquivoprisma/seed.ts com alguns dados fictícios.
Então, vamos executar o seguinte comando para alimentar nosso banco de dados:
1npx prisma db seed
Isso também cria as coleções User e Post definidas em prisma/schema.prisma.

Outras atualizações para o código de exemplo

Como fizemos algumas alterações no tipo de dados id, precisaremos atualizar parte do código de exemplo para refletir essas alterações.
As atualizações estão nos arquivos pages/api/post/[id].ts e pages/api/publish/[id].ts.
Aqui está um exemplo. Precisamos remover a chamada Number() da referência ao campo id, pois agora ele é uma String.
1// BEFORE
2async function handleGET(postId, res) {
3 const post = await prisma.post.findUnique({
4 where: { id: Number(postId) },
5 include: { author: true },
6 })
7 res.json(post)
8}
9
10// AFTER
11async function handleGET(postId, res) {
12 const post = await prisma.post.findUnique({
13 where: { id: postId },
14 include: { author: true },
15 })
16 res.json(post)
17}

Preenchimento automático e IntelliSense incríveis

Exemplo de GIF mostrando o preenchimento automático do VS Code e os recursos do IntelliSense
Observe neste arquivo, ao passar o mouse sobre a variávelpost, o VS Code sabe que é do tipo Post. Se quisermos um campo específico disso, o VS Code sabe automaticamente quais campos estão incluídos. Sem suposições!

Execute o aplicativo

Essas são todas as atualizações necessárias. Agora podemos executar o aplicativo e os dados são exibidos.
1npm run dev
Podemos abrir o aplicativo no navegador em http://localhost:3000/.
Captura de tela das páginas do aplicativo resultantes no navegador
Na página principal, você pode clicar em uma publicação para vê-la. A partir daí, você pode excluir a publicação.
Podemos acessar a página de Rascunhos para ver qualquer postagem não publicada. Quando clicamos em qualquer postagem não publicada, podemos publicá-la ou excluí-la.
O botão "Signup" nos permitirá adicionar um novo usuário ao banco de dados.
E, por fim, podemos criar uma nova publicação clicando no botão "Criar rascunho".
Todas essas ação são realizadas pelo cliente Prisma usando as rotas da API definidas em nosso aplicativo.
Confira a pastapages/api para se aprofundar nas rotas da API.

Conclusão

O Prisma facilita o manuseio de esquemas no MongoDB. Ele se destaca especialmente ao usar o TypeScript, tornando seu código legível e seguro em relação aos tipos. Ele também ajuda a gerenciar vários relacionamentos de coleções por meio da integridade referencial.
Posso ver o benefício de definir seu esquema no nível do aplicativo e usarei o Prisma para me conectar ao MongoDB no futuro.
Dê sua opinião na MongoDB Community.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Artigo

O custo de não conhecer o MongoDB


Nov 11, 2024 | 23 min read
Tutorial

Crie uma API CRUD com MongoDB, Typescript, Express, Prisma e Zod


Sep 04, 2024 | 10 min read
Tutorial

Autenticação NextAuth.js com MongoDB


Aug 30, 2024 | 10 min read
Tutorial

GraphQL APIs instantâneas para MongoDB com Grafbase


Oct 12, 2023 | 7 min read
Sumário