19. MongoDB
Prisma поддерживает MongoDB начиная с версии 3.x, однако работа с документной базой данных имеет свои особенности. Важно понимать ключевые отличия MongoDB от реляционных баз данных при использовании Prisma.
Настройка провайдера
Заголовок раздела «Настройка провайдера»datasource db { provider = "mongodb" url = env("MONGODB_URI")}ObjectId — идентификаторы в MongoDB
Заголовок раздела «ObjectId — идентификаторы в MongoDB»В MongoDB все документы имеют поле _id типа ObjectId. Prisma предоставляет атрибут @db.ObjectId для маппинга:
model User { id String @id @default(auto()) @map("_id") @db.ObjectId email String @unique name String}Встроенные документы (Embedded Documents)
Заголовок раздела «Встроенные документы (Embedded Documents)»MongoDB поддерживает хранение связанных данных внутри одного документа — в отличие от реляционных баз, где используются отдельные таблицы:
type Address { street String city String zip String}
model User { id String @id @default(auto()) @map("_id") @db.ObjectId email String @unique address Address?}Реляционные ссылки в MongoDB
Заголовок раздела «Реляционные ссылки в MongoDB»Для отношений между коллекциями используются @db.ObjectId поля:
model Post { id String @id @default(auto()) @map("_id") @db.ObjectId title String authorId String @db.ObjectId author User @relation(fields: [authorId], references: [id])}Отличия от реляционных БД
Заголовок раздела «Отличия от реляционных БД»| Особенность | Реляционные | MongoDB |
|---|---|---|
| Транзакции | Полная поддержка | Только в replica set |
| Миграции | prisma migrate | Нет (нет схемы) |
| JOIN | Через include | Через populate |
| Встроенные данные | Нет | Есть |