Hogyan készítsünk egyedi indexet a MongoDB-ben

Hogyan Keszitsunk Egyedi Indexet A Mongodb Ben



A MongoDB-ben egy egyedi index biztosítja, hogy a gyűjteményben egy adott mezőben vagy mezőcsoportban minden egyes érték egyedi legyen. A createIndex() metódussal egyedi indexmezőt készíthetünk az adott gyűjteményhez. Az adatok integritásának megőrzése és a létfontosságú mezők ismétlődésének elkerülése érdekében az egyedi indexek hasznosak. A cikk bemutatta, hogyan lehet egyedi indexet létrehozni az adott gyűjteményhez. db.candidates.insertMany([

{ név: 'Alexa Bill' , fokozat: 'A' , tanfolyam: 'piton' },

{ név: 'Jane Marks' , fokozat: 'B' , tanfolyam: 'Jáva' },

{ név: 'Paul Ken' , fokozat: 'C' , tanfolyam: 'C#' },

{ név: 'Emily Jeo' , fokozat: 'D' , tanfolyam: 'php' }

]);

Egyedi indexmezőt is létrehozhatunk, ha a gyűjteményben néhány dokumentum található. Ehhez beillesztjük az új gyűjteménybe azt a dokumentumot, amely a „jelöltek”, akiknek a beszúrási lekérdezése a következőképpen történik:







1. példa: Hozzon létre egyedi indexet egyetlen mezőhöz

Az indexet létrehozhatjuk a createIndex() metódussal, és egyedivé tehetjük a mezőt, ha az egyedi opciót a logikai „true”-val adjuk meg.



db.candidates.createIndex( { fokozat: 1 }, { egyedi: igaz } )

Itt elindítjuk a createIndex() metódust a „candidates” gyűjteményben, hogy egy adott mező egyedi indexét hozzuk létre. Ezután a „grade” mezőt „1” értékkel látjuk el az index specifikációhoz. Az „1” itt a gyűjtemény növekvő indexét jelenti. Ezután adjuk meg az „egyedi” opciót a „true” értékkel, hogy kikényszerítsük a „grade” mező egyediségét.



A kimenet azt jelenti, hogy az „érdemjegy” mezőben lévő egyedi index létrejön a „jelöltek” gyűjteményhez:





2. példa: Hozzon létre egynél több mező egyedi indexét

Az előző példában csak egyetlen mező jön létre egyedi indexként. De a createIndex() metódussal egyszerre is létrehozhatunk két mezőt egyedi indexként.



db.candidates.createIndex( { fokozat: 1 , tanfolyam: 1 }, { egyedi: igaz } )

Itt hívjuk meg a createIndex() metódust ugyanazon a „candidates” gyűjteményen. A createIndex() metódushoz két mezőt adunk meg – „grade” és „course” –, első kifejezésként „1” értékkel. Ezután beállítjuk az egyedi beállítást a „true” értékkel, hogy létrehozzuk ezt a két egyedi mezőt.

A kimenet két egyedi indexet képvisel, a „grade_1” és „course_1” a következő „jelöltek” gyűjteményhez:

3. példa: Hozzon létre egy összetett egyedi mezőindexet

Ugyanakkor ugyanazon a gyűjteményen belül egyidejűleg is létrehozhatunk egyedi összetett indexet. Ezt a következő lekérdezéssel érjük el:

db.candidates.createIndex( { név: 1 , fokozat: 1 , tanfolyam: 1 }, { egyedi: igaz }

Ismét a createIndex() metódust használjuk a „jelöltek” gyűjtemény összetett egyedi indexének létrehozásához. Ezúttal három mezőt haladunk át – „érdemjegy”, „név” és „tanfolyam” –, amelyek a „jelöltek” gyűjtemény növekvő indexmezőiként működnek. Ezután meghívjuk az „egyedi” opciót, hogy a mezőt egyedivé tegyük, mivel ehhez az opcióhoz az „igaz” hozzá van rendelve.

A kimenet megjeleníti az eredményeket, amelyek azt mutatják, hogy most mindhárom mező a megadott gyűjtemény egyedi indexe:

4. példa: Hozzon létre egy egyedi indexet az ismétlődő mezőértékekből

Most megpróbáljuk egyedi indexet létrehozni a duplikált mezőértékhez, amely hibát vált ki az egyediségi megszorítás fenntartása érdekében.

db.candidates.createIndex({név: 1 },{egyedi:igaz})

Itt a hasonló értékeket tartalmazó mező egyedi indexfeltételeit alkalmazzuk. A createIndex() metóduson belül meghívjuk a „name” mezőt „1” értékkel, hogy egyedi indexré tegyük, és az egyedi opciót „true” értékkel határozzuk meg. Mivel a két dokumentum „név” mezője azonos értékekkel rendelkezik, nem tehetjük ezt a mezőt a „jelöltek” gyűjtemény egyedi indexévé. A duplikált kulcshiba a lekérdezés végrehajtásakor jelentkezik.

Ahogy az várható volt, a kimenet generálja az eredményeket, mert a névmező két különböző dokumentum esetében ugyanazt az értéket tartalmazza:

Így frissítjük a „jelöltek” gyűjteményt úgy, hogy a dokumentumban minden „név” mezőnek egyedi értéket adunk, majd létrehozzuk a „név” mezőt egyedi indexként. A lekérdezés végrehajtása általában a „name” mezőt hozza létre egyedi indexként, amint az a következőkben látható:

5. példa: Hozzon létre egy hiányzó mező egyedi indexét

Alternatív megoldásként alkalmazzuk a createIndex() metódust arra a mezőre, amely nem létezik a gyűjtemény egyik dokumentumában sem. Ennek eredményeként az index null értéket tárol a mezőben, és a művelet meghiúsul a mező értékének megsértése miatt.

db.candidates.createIndex( { email: 1 }, { egyedi: igaz } )

Itt a createIndex() metódust alkalmazzuk, ahol az „e-mail” mezőt „1” értékkel látjuk el. Az „e-mail” mező nem létezik a „jelöltek” gyűjteményben, és megpróbáljuk egyedi indexévé tenni a „jelöltek” gyűjteményhez úgy, hogy az egyedi beállítást „igaz”-ra állítjuk.

Amikor az erre vonatkozó lekérdezés végrehajtódik, hibát kapunk a kimenetben, mivel az „e-mail” mező hiányzik a „jelöltek” gyűjteményből:

6. példa: Hozzon létre egy mező egyedi indexét egy ritka opcióval

Ezután az egyedi index a ritka opcióval is létrehozható. A ritka index funkciója az, hogy csak az indexelt mezővel rendelkező dokumentumokat tartalmazza, kivéve azokat a dokumentumokat, amelyek nem rendelkeznek indexelt mezővel. A ritka opció beállításához a következő struktúrát adtuk meg:

db.candidates.createIndex( { tanfolyam : 1 },

{ név: 'unique_sparse_course_index' , egyedi: igaz, ritka: igaz } )

Itt megadjuk a createIndex() metódust, ahol a „course” mező értéke „1”. Ezt követően megadjuk a kiegészítő opciót egy egyedi indexmező beállításához, amely a „pálya”. Az opciók között szerepel a „name”, amely beállítja az „unique_sparse_course_index” indexet. Ezután megvan az „egyedi” opció, amelyet „true” értékkel adunk meg, és a „sparse” opció szintén „true”-ra van állítva.

A kimenet egyedi és ritka indexet hoz létre a „pálya” mezőben, az alábbiak szerint:

7. példa: Mutassa meg a létrehozott egyedi indexet a GetIndexes() metódussal

Az előző példában csak egyedi index jött létre a megadott gyűjteményhez. A „jelöltek” gyűjtemény egyedi indexeivel kapcsolatos információk megtekintéséhez és lekéréséhez a következő getIndexes() metódust használjuk:

db.candidates.getIndexes();

Itt a getIndexes() függvényt hívjuk meg a „candidates” gyűjteményben. A getIndexes() függvény visszaadja az előző példákban létrehozott „jelöltek” gyűjtemény összes indexmezőjét.

A kimenet megjeleníti a gyűjteményhez létrehozott egyedi indexet: egyedi indexet, összetett indexet vagy egyedi ritka indexet:

Következtetés

Megkíséreltünk egyedi indexet létrehozni a gyűjtemény egyes mezőihez. Megvizsgáltuk, hogyan lehet egyedi indexet létrehozni egyetlen mezőhöz és több mezőhöz. Megkíséreltünk olyan egyedi indexet is létrehozni, ahol a művelet egyedi kényszer megsértése miatt meghiúsul.