Today, we are excited to share the 3.12.0
stable release 🎉
🌟 Help us spread the word about Prisma by starring the repo or tweeting about the release. 🌟
Major improvements and new features
MongoDB is now Generally Available
If you’ve been using MongoDB since it was in Preview, we'd like to say: Thank you! Your testing and feedback has been essential during the preview phase, and our MongoDB support is much better because of it.
Today we’re proud to announce that MongoDB is now stable and production-ready. After upgrading to 3.12.0
, you can remove the MongoDB preview flag in your schema:
datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
- previewFeatures = ["mongoDb"]
}
We’ve been working hard towards this day ever since we launched MongoDB in Preview in July 2021.
Here are some of the feature highlights we developed over this period:
- Expressive and type-safe operations for querying MongoDB embedded documents
- Thorough introspection support for using Prisma with existing MongoDB databases
- Declarative index management right from your Prisma Schema with
db push
- Powerful raw query APIs to help you incrementally migrate to Prisma
You can learn about these features in the release blog post, and more, in our freshly brewed MongoDB Guide. For newcomers to Prisma with MongoDB, we recommend you check out our Getting Started Guide.
To celebrate this milestone, we invite you to join Prisma’s MongoDB Launch Week starting on April 25th. Enjoy a jam-packed week of exclusive workshops with plenty of opportunities to win free MongoDB Atlas credits and swag. It’s free to sign-up and available anywhere you have an internet connection.
🚨 Please be aware that we made a few breaking changes to tie up loose ends before General Availability:
We made some changes in the 3.11.1
patch release in case you missed it.
Index support on composite type fields
We also added support for adding indexes on embedded document fields in MongoDB. This means that you can now define a normal, unique, or full-text index in your schema.
type Address {
street String
number Int
}
model User {
id Int @id
email String
address Address
@@index([email, address.number]) /// normal index
@@unique([email, address.street]) /// unique index
@@fulltext([email, address.street]) /// full-text index
}
Note: Prisma Client does not yet fully support the feature for now. This will be rolled out in a future release.
Improved Connection Pooling Resiliency
In 3.12.0
, we busted a ghost that has been bugging teams since the early days of the Prisma ORM. Under certain amounts of load, some people reported that the connection pool would sometimes drop connections or deadlock and not recover.
After many sightings and a lot of head-scratching, we were finally able to reproduce the issue. This allowed us to narrow down the problem to one of our dependencies and fix the problem.
To read the nitty gritty details of the problem and our solution, check out this issue.
Fixes and improvements
Prisma Client
- Bundling fails on 2.21.0
- "Timed out fetching a new connection from the pool" message is misleading
- I get "Can't resolve '_http_common'" when I use NestJS with monorepo (webpack)
- Broken on Next.js 10.2.0 which uses Webpack 5 when running a custom server to support HTTPS locally
- Timed out fetching a new connection from the pool
- Multiple prisma with nx workspaces and nestjs
- Prisma Client (Binary): upgrade to undici@4
- issue with connection pool ?
- Prisma does not recover from PrismaClientInitializationError
- Connection pool timeout errors when using higher connection_limit
- DB connection retry not happening
- Prisma does not recover from DB being down on start up
- Prisma client never recovers from P1001
new PrismaClient()
can not findschema.prisma
file when use with pnpm workspace- Prisma client cannot find datamodel path ("schema.prisma")
- Interactive Transaction concurrent writes cause Prisma to hang
- MongoDB: improve error message
Inconsistent column data: Malformed ObjectID
by including the field(s) in the message - Unable to establish a connection once database recovers
- Composite Type should disallow null on a required contains one
- Prisma 3.9.x+ multiple clients being generated, and in the wrong Yarn 1 workspace
- MongoDB:
Inconsistent column data: Failed to convert ...
error on invalid data in properties does not mention affected field (and other useful information) - MongoDB findRaw doesn't seem to work
- errorFormat:"minimal" or other options not working
- Interactive transactions are not logging DB queries
- Count action ends up being called aggregate when checking in middleware
- MongoDB logging
QueryEvent
typeparams
isundefined
- MDBGA: Finish refactoring MongoDB queries to use boolean expressions
- Re-evaluate and -confirm supported native types on MongoDB
- Allow to filter by undefined fields in MongoDB
- MongoDB GA: Remove Preview Feature checks and Preview mentions
Prisma
- Connection issues never seem to go away(how to deploy prisma live reliably) [MySQL, TypeGraphQL, EBS]
- Error: [libs/datamodel/connectors/dml/src/model.rs:222:92] called
Option::unwrap()
on aNone
value - Error: [libs\sql-schema-describer\src\lib.rs:171:32] Column id not found in Table videos
- Prisma Migrate shows warning when editing rolled-back migration
- Prisma client not attempting to reconnect on "Can't reach database server"
- Error: Error in migration engine. Reason: [libs\sql-schema-describer\src\walkers.rs:592:14] STATE ERROR BOOP
- Error report
- MongoDB type inference mismatch
- Error: [libs\datamodel\core\src\transform\dml_to_ast\mod.rs:74:59] called
Option::unwrap()
on aNone
value - Cannot use
prisma db push
on MongoDB with@unique
id - CockroachDB: Remove the Json native type
- Error: [libs/datamodel/connectors/dml/src/model.rs:363:66] called
Option::unwrap()
on aNone
value - Error: [libs/datamodel/core/src/transform/dml_to_ast/mod.rs:74:59] called
Option::unwrap()
on aNone
value - Can
migrate diff
correctly resolve relative SQLite file path from schema? - Introspection: MongoDB: Warnings mention Native Types instead of PSL types (e.g. Document instead of Json)
- MongoDB: Mixed data comments should mention PSL types instead of Mongo Native Types (
Int32
=>Int
) - Composite Indices: Support in the PSL
- Composite Indices: MongoDB Introspection Connector
- Composite Indices: MongoDB Migration Connector
- [MDB] Validate valid field / key names in the datamodel
- Introspecting indexes on embedded documents leads to validation error
- [Mongo] Improve native type validations in composite types
- [Mongo] Too generic error messages in composite types
Prisma Migrate
- Unique/Index keeps getting recreated
- Introspected CockroachDB schema has different field type than original Prisma schema that was migrated
Language tools (e.g. VS Code)
prisma-fmt
panic when@db.Array()
is added in a MongoDB schema- Embedded many-to-many relations do not suggest valid values in
references
- @relation auto completion: fields and references are still suggested when already present (when trailing comma is missing)
- Native type
Array()
is still auto suggested
Prisma Engines
- [Composites] Implement
updateMany
write operation - [Composites] Implement
deleteMany
write operation - Remove decimal support from MongoDB
- Investigate intermittently failing cockroachdb test suite on buildkite
- [MongoDB] Having filters don't work without selection
Credits
Huge thanks to @ever0de, @chronotc, @hayes, @maddhruv, @jasimon, @codesee-maps[bot], @andyrichardson, @xnerhu, @Josh-a-e, @dusandz for helping!
💼 We're hiring!
If you're interested in joining our growing team to help empower developers build data-intensive applications, Prisma is the place for you.
We're looking for a Developer Success Engineer and Back-end Engineer: Prisma Data Platform.
Feel free to read through the job descriptions and apply using the links provided.
📺 Join us for another "What's new in Prisma" livestream
Learn about the latest release and other news from the Prisma community by joining us for another "What's new in Prisma" livestream.
The stream takes place on YouTube on Thursday, April 7 at 5 pm Berlin | 8 am San Francisco.