Prisma @unique null не проходит проверку

У меня есть следующая схема:

model Player {
  id        String    @id @default(auto()) @map("_id") @db.ObjectId
  steam_id  String    @unique
  name      String
  level     Int       @default(1)
  elo       Float     @default(1500)
  games     Game[]    @relation(fields: [game_ids], references: [id])
  game_ids  String[]  @db.ObjectId

  clients   Client[]

  user      User?     @relation(fields: [user_id], references: [id])
  user_id   String?    @db.ObjectId @unique

  created_at        DateTime    @default(now())
  updated_at        DateTime    @updatedAt
  @@map("players")
}

Как видите, user_id — необязательное поле. Однако отношение ТРЕБУЕТ, чтобы оно было помечено как уникальное. При этом я получаю следующую ошибку: дубликат ключа {user_id: null }

Что я могу здесь сделать?

discord.com/channels/937751382725886062/1229360371278549023/‌​… Мои заметки и дополнительные исследования в официальном дискорде Prisma #ask
user2896438 15.04.2024 12:23
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
1
180
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Этот сценарий в настоящее время не поддерживается Prisma.

Существует давнее обсуждение/запрос на добавление функции, который вы можете проверить здесь. Цитата из этого вопроса:

[..] Я думаю, что причина, по которой мы это пока не поддерживаем, заключается в том, что Postgres — единственная поддерживаемая нами база данных, которая ведет себя таким образом, остальные отвергают повторяющиеся значения NULL.

Как бы я мог обойти эту проблему, нужно удалить уникальное ограничение и выполнить проверку кода: если user_id не равно нулю, запросить БД, чтобы узнать, существует ли это значение. Если да, отклоните вставку.

Да, это работает, но я не хочу полагаться на код.

user2896438 23.06.2024 20:23
Ответ принят как подходящий

Честно говоря, это ошибка команды Prisma.

Чтобы это исправить, все, что вам нужно сделать, это зайти в индексы вашей коллекции и пометить индекс как «разреженный».

Вы можете сделать это и программно.

Другие вопросы по теме