A MongoDB egy dokumentumadatbázis, és nem tart fenn kapcsolatokat a dokumentumok között, például a relációs adatbázisokat, például a PostgreSQL-t.

Ennek ellenére a MongoDB lehetővé teszi a dokumentumok közötti kapcsolatok létrehozását. Ezek a kapcsolatok modellezhetők beágyazott vagy hivatkozott megközelítésekkel. Nézzük meg közelebbről.

Beágyazott kapcsolatok vs. Referencia kapcsolatok

A beágyazott megközelítésben egy dokumentumot közvetlenül beszúrnak egy másik dokumentumba, ami beágyazott adatokat eredményez. A folyamatot „denormalizációnak” is nevezik.

A referencia megközelítés ezzel szemben dokumentumhivatkozásokat használ az egyik dokumentumról a másikra való mutatáshoz. Ezt a megközelítést „normalizálásnak” is nevezik.

MongoDB: Egyéni kapcsolatok beágyazott dokumentumokkal

A beágyazott megközelítéssel egy-egy kapcsolatot hozhat létre a dokumentumok között. Ez a kapcsolat akkor fordul elő, ha egy dokumentumobjektum csak egy másik dokumentumhoz kapcsolódhat.

Tekintsünk egy diák adatbázist. Ez az adatbázis a hallgatói és lakcímgyűjteményeket tartalmazza az alábbi dokumentumokkal.

instagram viewer
// Tanulói dokumentum
{
"studentName": "Frodó Zsákos",
"phoneNumber": "987654321",
};
// Címdokumentum
{
"studentName": "Frodó Zsákos",
"street": "Bagshot Row",
"város": "Hobiton",
}

Ebben az adatbázisban egy hallgatónak csak egy címe lehet. A cím lekéréséhez le kell kérdeznie a címgyűjteményt a hallgató nevével.

Összefüggő: Hogyan hozzunk létre adatbázist és gyűjteményt a MongoDB-ben

Azokban az esetekben, amikor a címet más adatokkal együtt használják, mint pl tanuló név, akkor többször kell lekérdeznie az adatbázist. Ennek hátránya az olvasási műveletek nagy száma és ennek következtében az alacsony lekérdezési teljesítmény.

A beágyazott megközelítés használatával a címadatokat közvetlenül a hallgatói dokumentumba szúrhatja be, és csak egyetlen lekérdezéssel kaphatja meg az adatokat.

{
"studentName": "Frodó Zsákos",
"phoneNumber": "987654321",
"cím": [{
"street": "Bagshot Row",
"város": "Hobiton"
}],
};

A cím lekéréséhez a tanuló név, használja ezt a lekérdezést.

db.student.findOne({"tanulónév":"Frodó Zsákos"}, {"cím":1})

Egy-a sokhoz kapcsolatok beágyazott dokumentumokkal a MongoDB-ben

Vegyünk egy olyan helyzetet, amikor egy tanulónak több címe van. A tanuló és a megszólítások közötti kapcsolat egy a többhez válik.

A beágyazott modell lehetővé teszi több cím hozzáadását a tanulói dokumentumhoz. A beágyazott dokumentumokat használó egy-egy kapcsolathoz hasonlóan ennek a megközelítésnek is viszonylag magas a lekérdezési teljesítménye.

{
"studentName": "Frodó Zsákos",
"phoneNumber": "987654321",
"cím": [
{
"street": "Bagshot Row",
"város": "Hobiton"
},
{
"street": "Another Bagshot Row",
"város": "Hobiton2"
},
]
};

Az alábbi lekérdezés a megadott tanulónév címeit adja vissza.

db.student.findOne({tanulónév: „Frodó Baggins”}, {cím: 1})

Összefüggő: Dokumentumok létrehozása a MongoDB-ben

Most, ha több címe van, és folyamatosan hozzáadja őket a címmezőhöz, a dokumentum meglehetősen gyorsan zsúfolttá válhat. Az egyik megoldás a dokumentumhivatkozások használata.

MongoDB: Egy-a sokhoz kapcsolatok dokumentumhivatkozásokkal

A referencia-megközelítés használatával egy-a többhez kapcsolatot is modellezhet. Ebben az adatmodellben a hallgatói és lakcímadatokat külön gyűjteményekben tárolják. Ha a hallgatót a címéhez szeretné kapcsolni, adjon hozzá egy, a címazonosítókat tartalmazó mezőt a hallgatói dokumentumhoz.

{
"studentName": "Frodó Zsákos",
"phoneNumber": "987654321",
"cím": [
ObjectId("61fa7bfeebdadf8ac71427ea"),
ObjectId("61fa7d19ebdadf8ac71427eb")
]
};

A tanulók címadatainak lekérése magában foglalja a címazonosítók lekérését a hallgatói dokumentumból, és az azonosítók használatával a tényleges címek lekérését a gyűjteményből.

const student = db.users.findOne({"név":"Frodó Zsákos"},{"cím":1})
const addresses = db.address.find({"_id":{"$in":student["cím_azonosítók"]}})

Választás a beágyazott és a referencia megközelítések között

Mind a beágyazó, mind a hivatkozási modellnek megvannak a maga előnyei és hátrányai, és a választás előtt figyelembe kell vennie néhány dolgot. Kezdetnek figyelembe kell vennie a használati esetet. Ha az adatok csak egy dokumentumhoz kapcsolódnak, a beágyazás lehet a legjobb megoldás.

Egy-a-többhöz kapcsolatok létrehozásához használhatja a hivatkozási modellt vagy a beágyazott modellt. A hivatkozás tiszta és konzisztens dokumentumot eredményez, mivel csak a hivatkozni kívánt dokumentum hivatkozási azonosítóját adja hozzá.

A csatlakoztatott adatok lekéréséhez szükséges olvasási műveletek száma azonban viszonylag magas, és hatással lehet a teljesítményre. A dokumentum beágyazása növelheti a teljesítményt, de sok beágyazott dokumentum esetén zsúfolt gyűjteményhez vezethet.

Az adatkapcsolatok dokumentumban való megvalósításának módja tehát teljes mértékben Önön múlik. Fontolja meg, hogyan fogja használni a dokumentumot, milyen lekérdezési teljesítményszintet szeretne elérni, és milyen kompromisszumokat szeretne megtenni.

Hogyan különbözik az adatmodellezés a MongoDB-ben?

Más megközelítést fontolgat az adatbázisokhoz? Így működik az adatmodellezés a MongoDB-ben.

Olvassa el a következőt

RészvényCsipogEmail
Kapcsolódó témák
  • Programozás
  • Programozás
  • adatbázis
A szerzőről
Mária Gathoni (4 cikk megjelent)

Mary Gathoni egy szoftverfejlesztő, aki szenvedélyesen hoz létre olyan technikai tartalmat, amely nem csak informatív, hanem vonzó is. Amikor nem kódol vagy ír, szívesen lóg a barátaival és a szabadban van.

Továbbiak Mary Gathonitól

Iratkozzon fel hírlevelünkre

Csatlakozzon hírlevelünkhöz műszaki tippekért, ismertetőkért, ingyenes e-könyvekért és exkluzív ajánlatokért!

Kattintson ide az előfizetéshez