A Voyage AI se une ao MongoDB para impulsionar aplicativos de AI mais precisos e confiáveis no Atlas.

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 .

Segurança de tipo com Prisma e MongoDB

Jesse Hall4 min read • Published Apr 25, 2022 • Updated Aug 09, 2024
Facebook Icontwitter iconlinkedin icon
Avaliar este tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Você sabia que o Prisma agora é compatível com o 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 acessados em conjunto devem ser armazenados juntos em um MongoDB database. O Prisma permite o 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 quiser ver o código final, você pode 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 de introdução ao 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 estiver usando o Visual Studio Code, instale a extensão oficial Prisma VS Code para ajudar na formatação e no preenchimento automático.
Enquanto você estiver no VS Code, instale também a extensão oficial do MongoDB VS Code para monitorar seu banco de dados diretamente no VS Code!
No objeto datasource 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 para 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 é um .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

Example GIF showing VS Code autocomplete and IntelliSense capabilities
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/.
Screencapture of the resulting application pages in the browser
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 pages/api pasta 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.

Facebook Icontwitter iconlinkedin icon
Avaliar este tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Como implementar o MongoDB Atlas com o AWS CDK no TypeScript


Mar 13, 2025 | 5 min read
Tutorial

Usando Expo e Realm React Native com expo-dev-client


Aug 26, 2022 | 3 min read
exemplo de código

myLeG


Jul 07, 2022 | 1 min read
Tutorial

Crie um JavaScript AI agente de com langGraph.js e MongoDB


Sep 18, 2024 | 15 min read