MongoDB ir dokumentu datu bāze, un tajā netiek uzturētas attiecības starp dokumentiem, piemēram, relāciju datubāzēm, piemēram, PostgreSQL.

Tomēr MongoDB ļauj izveidot attiecības starp dokumentiem. Šīs attiecības var modelēt, izmantojot iegultās vai atsauces pieejas. Apskatīsim tuvāk.

Iegultās attiecības vs. Atsauces attiecības

Iegultā pieejā dokuments tiek tieši ievietots citā dokumentā, kā rezultātā tiek izveidoti ligzdoti dati. Šo procesu sauc arī par "denormalizāciju".

No otras puses, atsauces pieeja izmanto atsauces uz dokumentiem, lai norādītu no viena dokumenta uz citu. Šo pieeju sauc arī par "normalizāciju".

MongoDB: viena pret vienu attiecības ar iegultiem dokumentiem

Varat izveidot savstarpējas attiecības starp dokumentiem, izmantojot iegulto pieeju. Šī saistība rodas, ja viens dokumenta objekts var attiekties tikai uz vienu citu dokumentu.

Apsveriet studentu datubāzi. Šajā datu bāzē ir studentu un adrešu kolekcijas ar šādiem dokumentiem.

// Studentu dokuments
{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
};
// Adreses dokuments
{
"studentName": "Frodo Baggins",
"iela": "Bagshot Row",
"pilsēta": "Hobiton",
}

Šajā datubāzē studentam ir atļauta tikai viena adrese. Lai izgūtu adresi, jums būs jājautā adrešu kolekcijai, izmantojot skolēna vārdu.

Saistīts: Kā izveidot datu bāzi un kolekciju MongoDB

Gadījumos, kad adrese tiek izmantota kopā ar citām detaļām, piemēram, a studenta vārds, jums būs jāveic vaicājumi datu bāzē vairākas reizes. Negatīvā puse ir liels lasīšanas darbību skaits un līdz ar to zemā vaicājumu veiktspēja.

Izmantojot iegulto pieeju, varat ievietot adreses datus tieši studenta dokumentā un izmantot tikai vienu vaicājumu, lai iegūtu datus.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"adrese": [{
"iela": "Bagshot Row",
"pilsēta": "Hobitons"
}],
};

Lai izgūtu adresi, izmantojot studenta vārds, izmantojiet šo vaicājumu.

db.student.findOne({"studenta vārds":"Frodo Baggins"}, {"adrese":1})

Attiecības viens pret daudziem ar iegultiem dokumentiem MongoDB

Apsveriet situāciju, kad skolēnam ir vairākas adreses. Attiecības starp studentu un adresēm kļūst viens pret daudziem.

Iegultais modelis ļauj studenta dokumentam pievienot vairākas adreses. Tāpat kā attiecībās viens pret vienu, izmantojot iegultos dokumentus, šai pieejai ir salīdzinoši augsta vaicājumu veiktspēja.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"adrese": [
{
"iela": "Bagshot Row",
"pilsēta": "Hobitons"
},
{
"iela": "Another Bagshot Row",
"pilsēta": "Hobiton2"
},
]
};

Tālāk sniegtais vaicājums atgriezīs norādītā studenta vārda adreses.

db.student.findOne({studenta vārds: “Frodo Baggins”}, {adrese: 1})

Saistīts: Kā izveidot dokumentus MongoDB

Tagad, ja jums ir vairāk adrešu un turpiniet tās pievienot adreses laukam, dokuments diezgan ātri var kļūt pārblīvēts. Viens risinājums ir izmantot atsauces uz dokumentiem.

MongoDB: viena pret daudziem attiecības ar dokumentu atsaucēm

Varat arī modelēt attiecības viens pret daudziem, izmantojot atsauces pieeju. Šajā datu modelī studentu un adreses dati tiks glabāti atsevišķās kolekcijās. Lai saistītu studentu ar viņa adresi, studenta dokumentam pievienojiet lauku, kurā ir adrešu ID.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"adrese": [
ObjectId ("61fa7bfeebdadf8ac71427ea"),
ObjectId ("61fa7d19ebdadf8ac71427eb")
]
};

Studenta adreses informācijas iegūšana ietver adrešu ID izgūšanu no studenta dokumenta un šo ID izmantošanu, lai iegūtu faktiskās adreses no kolekcijas.

const students = db.users.findOne({"nosaukums":"Frodo Baggins"},{"adrese":1})
const adreses = db.adrese.find({"_id":{"$in":students["adreses_id"]}})

Izvēle starp iegulto un atsauces pieeju

Gan iegulšanas, gan atsauces modeļiem ir savi plusi un mīnusi, un pirms izvēles veikšanas jums ir jāapsver dažas lietas. Iesācējiem jums būs jāapsver lietošanas gadījums. Ja dati būs saistīti tikai ar vienu dokumentu, iegulšana varētu būt labākā izvēle.

Lai izveidotu attiecības viens pret daudziem, varat izmantot vai nu atsauces modeli, vai iegulto modeli. Atsauces rezultātā tiek iegūts tīrs un konsekvents dokuments, jo jūs pievienojat tikai tā dokumenta atsauces ID, ar kuru vēlaties saistīt.

Tomēr pievienoto datu izgūšanai nepieciešamo lasīšanas darbību skaits ir salīdzinoši liels un var ietekmēt veiktspēju. Dokumenta iegulšana var palielināt veiktspēju, taču ar daudziem ligzdotiem dokumentiem var rasties pārslogota kolekcija.

Tāpēc izvēle, kā ieviest datu attiecības savā dokumentā, ir pilnībā jūsu ziņā. Apsveriet, kā izmantosit dokumentu, vaicājuma veiktspējas līmeni, uz kuru tiecaties, un kompromisus, ko esat gatavs veikt.

Kā datu modelēšana atšķiras MongoDB?

Vai apsverat atšķirīgu pieeju datu bāzēm? Lūk, kā MongoDB darbojas datu modelēšana.

Lasiet Tālāk

DalītiesČivinātE-pasts
Saistītās tēmas
  • Programmēšana
  • Programmēšana
  • datu bāze
Par autoru
Marija Gatoni (Publicēti 4 raksti)

Mary Gathoni ir programmatūras izstrādātāja, kuras aizraušanās ir tāda tehniska satura izveide, kas ir ne tikai informatīvs, bet arī saistošs. Kad viņa nekodē vai neraksta, viņai patīk pavadīt laiku ar draugiem un būt ārā.

Vairāk no Mary Gathoni

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai saņemtu tehniskos padomus, pārskatus, bezmaksas e-grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu