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.
// 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.
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
- Programozás
- Programozás
- adatbázis

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.
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