Перейти к содержимому

19. MongoDB

Prisma поддерживает MongoDB начиная с версии 3.x, однако работа с документной базой данных имеет свои особенности. Важно понимать ключевые отличия MongoDB от реляционных баз данных при использовании Prisma.

datasource db {
provider = "mongodb"
url = env("MONGODB_URI")
}

В MongoDB все документы имеют поле _id типа ObjectId. Prisma предоставляет атрибут @db.ObjectId для маппинга:

model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String @unique
name String
}

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?
}

Для отношений между коллекциями используются @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
Встроенные данныеНетЕсть