Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Tutorial: Integración con Prisma

Prisma es un ORM (objeto Relational Mapper) de código abierto para Node.js. Es compatible con JavaScript y TypeScript, aunque se usa principalmente con TypeScript para escribir código legible y seguro con tipos.

Advertencia

Compatibilidad de MongoDB para Prisma ORM v7

El controlador Node.js de MongoDB aún no es compatible con la versión 7 de Prisma ORM. Utilizar la última versión disponible 6.x de Prisma ORM al trabajar con MongoDB.

Los esquemas ayudan a los desarrolladores a evitar problemas de inconsistencia de datos con el tiempo al definir la estructura de los documentos de una colección. Mientras que puedes definir un esquema a nivel de base de datos dentro de MongoDB, Prisma te permite definir un esquema a nivel de aplicación. Dado que el cliente de Prisma conoce el esquema, los desarrolladores que utilizan el cliente de Prisma tienen acceso al autocompletado de queries.

Generalmente, los datos a los que se accede juntos deben almacenarse juntos en una colección de MongoDB. Prisma admite el uso de documentos incrustados para mantener los datos unidos. En los casos de uso en los que debe almacenar datos relacionados en colecciones de MongoDB separadas, debe incluir el campo _id de un documento en otro documento. Prisma agiliza este proceso y te ayuda a organizar estos datos relacionados, mientras mantiene la integridad referencial de los datos.

Cuando utilizas referencias para modelar las relaciones entre colecciones, puedes añadir el atributo @relation a tu esquema Prisma para habilitar que Prisma Client acceda a esas relaciones, emule acciones referenciales y ayude a mantener la integridad referencial.

Para obtener más información sobre el modelado de datos eficiente en MongoDB, consulte Reduce las operaciones de $lookup en el manual de MongoDB Server.

MongoDB tiene un esquema flexible por defecto. Cuando inspeccionas una base de datos MongoDB existente usando el comando prisma db pull, Prisma muestra hasta 1000 documentos aleatorios de cada colección para inferir la estructura del esquema.

Si tu colección contiene campos con tipos de datos inconsistentes entre documentos, Prisma asigna esos campos al tipo Json y genera una advertencia. Esto permite leer todos los datos existentes, pero reduce los beneficios de la seguridad de tipo. Para resolver esto, puede actualizar manualmente los datos para usar tipos coherentes y luego ejecutar prisma db pull nuevamente para regenerar el esquema con definiciones de tipo adecuadas. Para obtener más información, consulta Solución de problemas de conflictos de tipos.

Esta guía muestra cómo realizar las siguientes acciones:

  • Descargar una aplicación de ejemplo de Prisma

  • Configure tu esquema de Prisma

  • Crea y llena una base de datos de MongoDB con datos de muestra

  • Hacer que la aplicación de ejemplo sea compatible con MongoDB

  • Ejecuta la aplicación

1

Antes de empezar este tutorial, asegúrate de tener preparados los siguientes componentes:

2

Clona o descarga la aplicación de ejemplo del repositorio de ejemplos de Prisma.

Este ejemplo es una sencilla plataforma de gestión de contenidos para blogs que utiliza una base de datos SQLite. Los siguientes pasos modifican la aplicación para que utilice MongoDB en lugar de SQLite.

3

Navega al archivo prisma/schema.prisma en el directorio de la aplicación de ejemplo. En el objeto datasource db de este archivo, establece el campo provider en "mongodb" y el campo url en tu URI de conexión de Atlas.

En el modelo User en el mismo archivo, cambie el tipo de campo id de Int a String y establezca el valor por defecto en auto(). La propiedad id debe mapearse al campo _id de MongoDB. También debes instruir a Prisma para que establezca el tipo de datos para esta propiedad como ObjectId.

En el modelo Post, realiza los mismos cambios en el campo id que hiciste en el modelo User. Debes cambiar también el tipo de campo authorId de Int a String y establecer el tipo de datos en ObjectId.

Tu archivo schema.prisma debería parecerse al siguiente:

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mongodb"
url = "<your connection URI>"
}
model Post {
id String @id @default(auto()) @map("_id") @db.ObjectId
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
title String
content String?
published Boolean @default(false)
viewCount Int @default(0)
author User @relation(fields: [authorId], references: [id])
authorId String @db.ObjectId
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String @unique
name String?
posts Post[]
}

Este esquema define las colecciones User y Post por separado en tu base de datos MongoDB, donde cada Post contiene una referencia a un User.

Una vez que hayas realizado estos cambios, navega al directorio del proyecto en tu terminal y ejecuta los siguientes comandos para instalar las dependencias necesarias y generar el esquema:

npm install
npx prisma generate

Nota

Si realizas más cambios en el esquema, debes volver a ejecutar el comando npx prisma generate para que los cambios surtan efecto.

4

Para poblar la base de datos con datos de muestra, ejecute el archivo prisma/seed.ts en el proyecto de ejemplo ejecutando el siguiente comando:

npx prisma db seed

Esto crea las colecciones User y Post según lo definido por el archivo schema.prisma y las rellena con datos de muestra.

5

Navegue hasta el directorio src del proyecto de ejemplo. En los archivos pages/api/post/[id].ts y pages/api/publish/[id].ts, reemplace todas las instancias de Number(postId) con postId. Esto es necesario porque los campos id en el esquema ahora son del tipo String en lugar de Int.

6

Para iniciar la aplicación, ejecuta el siguiente comando desde el directorio del proyecto:

npm run dev

Navega a http://localhost:3000 en tu navegador web para ver y ejecutar la aplicación. Puedes usar la aplicación para crear, redactar, publicar y borrar entradas de blog. Puedes consultar las definiciones de rutas de API en la carpeta pages/api del proyecto de ejemplo.

Si tus colecciones MongoDB contienen campos que utilizan tipos de datos inconsistentes en varios documentos, Prisma Client podría lanzar errores al consultar datos que no coincidan con el tipo esperado según tu esquema.

Puedes realizar las siguientes acciones para abordar esto:

  1. Revisa las advertencias y los comentarios en tu esquema Prisma después de ejecutar prisma db pull para identificar los campos que utilizan tipos conflictivos.

  2. Actualiza tus datos para utilizar tipos consistentes en todos los documentos de la colección.

  3. Ejecuta prisma db pull de nuevo para regenerar tu esquema que incluye los tipos corregidos.

Alternativamente, puedes dejar el campo como tipo Json si necesitas mantener la flexibilidad. Sin embargo, esto reduce los beneficios de seguridad de tipos que proporciona Prisma.

Para obtener más información sobre Prisma, consulta la documentación de Prisma.

Para ver y descargar una versión completa de la aplicación en este tutorial, consulta el prisma-mongodb-nextjs-example repositorio de GitHub.