javascript - MongoDB & Prisma: jednostranný M-to-N vzťah
Existuje spôsob, ako vytvoriť jednostranný vzťah m-to-n, alebo musia obe kolekcie mať navzájom svoje ID? Snažím sa urobiť niečo takéto:
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])
// ....
}
Ale Prisma ma núti pridať ďalšie pole do Country, aby sa ukladali ID používateľov... Takto:
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])
}
Tieto údaje nepotrebujem a nie sú logicky potrebné. Existuje nejaký spôsob, ako to obísť? Nejaké riešenie?
Odpoveď č. 1
Po niekoľkých testoch som zistil, že ak nechám pole userIds, aj keď v žiadnom dokumente neexistuje, krajiny používateľa sa dajú stále správne dopytovať. Jedinou nevýhodou (nie celkom) je, že nemôžem dopytovať používateľov z krajín. Ale myslím, že to dáva zmysel, pretože ak by som ich skutočne potreboval dopytovať, pridanie vzťahu userIds ku krajine by tiež dávalo zmysel. Skutočným problémom je chyba, ktorá mi nedovolí zostaviť/spustiť kód bez userIds, aj keď bez neho funguje v poriadku.
ÚPRAVA:
Moje schéma dopadlo takto @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])
// ....
}
