Ricerca nel sito web

javascript - MongoDB & Prisma: relazione unilaterale M-a-N


Esiste un modo per creare una relazione unilaterale m-a-n oppure entrambe le collezioni devono avere gli ID dell'altro? Sto cercando di fare qualcosa del genere:

model Country {
  id              String    @id @default(auto()) @map("_id") @db.ObjectId
  name            String    @unique
  users           User[]
}

model User {
  id              String    @id @default(auto()) @map("_id") @db.ObjectId
  userName        String    @unique
  countryIds      String[]  @db.ObjectId
  countries       Country[] @relation(fields: [countryIds], references: [id])
  // ....
}

Ma Prisma mi sta facendo aggiungere un altro campo a Country per memorizzare gli ID degli utenti... Così:

model Country {
  id              String    @id @default(auto()) @map("_id") @db.ObjectId
  name            String    @unique
  userIds         String[]  @db.ObjectId
  users           Player[]  @relation(fields: [userIds], references: [id])
}

Non ho bisogno di quei dati e non sono logicamente necessari. C'è un modo per aggirarlo? Qualche soluzione alternativa?

Risposta n. 1

Dopo alcuni test ho scoperto che se lascio quel campo userIds, anche se non esiste in nessun documento, i paesi dell'utente possono comunque essere interrogati correttamente. L'unico svantaggio (non proprio) è che non posso interrogare gli utenti dai paesi. Ma immagino che abbia senso, dato che se avessi davvero bisogno di interrogarli, aggiungere la relazione userIds al paese avrebbe senso. Il vero problema è l'errore che non mi permette di costruire/eseguire il codice senza userIds, anche se funziona bene senza di esso.

MODIFICA:

Il mio schema è finito così @Min Somai:

model Country {
  id              String    @id @default(auto()) @map("_id") @db.ObjectId
  name            String    @unique
  userIds         String[]  @db.ObjectId
  users           User[]    @relation(fields: [countryIds], references: [id])
}

model User {
  id              String    @id @default(auto()) @map("_id") @db.ObjectId
  userName        String    @unique
  countryIds      String[]  @db.ObjectId
  countries       Country[] @relation(fields: [countryIds], references: [id])
  // ....
}