Overview
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.
Schemas
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.
Modelado de datos
Generalmente, los datos a los que se accede conjuntamente deben almacenarse juntos en una colección de MongoDB. Prisma admite el uso de documentos incrustados para mantener los datos juntos. En casos donde se deben almacenar datos relacionados en colecciones de MongoDB separadas, se debe incluir el documento de un documento. _id campo en otro documento. Prisma agiliza este proceso y te ayuda a organizar estos datos relacionados, mientras también 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 la modelización eficiente de datos en MongoDB, consulte Reducir operaciones $lookup en el manual del servidor MongoDB.
Introspección de esquemas
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.
Tutorial
Este tutorial 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
Ejecutar la aplicación
Verificar los prerrequisitos
Antes de empezar este tutorial, asegúrate de tener preparados los siguientes componentes:
Una cuenta de MongoDB Atlas con un clúster configurado. Para ver las instrucciones, consulte la guía de introducción a MongoDB.
Node.js v16.20.1 o después.
Descargar la aplicación de ejemplo
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.
Configure tu esquema de Prisma
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.
Su 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 (auto()) ("_id") .ObjectId createdAt DateTime (now()) updatedAt DateTime title String content String? published Boolean (false) viewCount Int (0) author User (fields: [authorId], references: [id]) authorId String .ObjectId } model User { id String (auto()) ("_id") .ObjectId email String 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.
Crear y rellenar la base de datos MongoDB
Para completar 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 llena con datos de muestra.
Hacer que la aplicación de ejemplo sea compatible con MongoDB
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.
Ejecutar la aplicación
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.
Resolución de conflictos de tipos
Si sus colecciones de MongoDB contienen campos que usan tipos de datos inconsistentes en los documentos, Prisma Client puede generar errores al consultar datos que no coinciden con el tipo esperado de su esquema.
Puedes realizar las siguientes acciones para abordar esto:
Revisa las advertencias y los comentarios en tu esquema Prisma después de ejecutar
prisma db pullpara identificar los campos que utilizan tipos conflictivos.Actualiza tus datos para utilizar tipos consistentes en todos los documentos de la colección.
Ejecuta
prisma db pullde 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.
Recursos adicionales
Para obtener más información sobre Prisma, consulte 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.