MongoDB'de Benzersiz Bir Dizin Nasıl Oluşturulur

Mongodb De Benzersiz Bir Dizin Nasil Olusturulur



MongoDB'de benzersiz bir dizin, bir koleksiyon içindeki belirli bir alandaki veya alan grubundaki her değerin benzersiz olmasını sağlar. createIndex() yöntemini kullanarak belirli bir koleksiyon için benzersiz bir dizin alanı oluşturabiliriz. Veri bütünlüğünü korumak ve hayati alanlarda mükerrer girişleri önlemek amacıyla benzersiz dizinler faydalıdır. Makale, belirli bir koleksiyon için benzersiz bir dizin oluşturmanın yollarını ele alıyordu. db.candidates.insertMany([

{ isim: 'Alexa Bill' , seviye: 'A' , kurs: 'piton' },

{ isim: 'Jane Marks' , seviye: 'B' , kurs: 'java' },

{ isim: 'Paul Ken' , seviye: 'C' , kurs: 'C#' },

{ isim: 'Emily Jeo' , seviye: 'D' , kurs: 'php' }

]);

Koleksiyonun içinde bazı belgelerle birlikte mevcut olması durumunda da benzersiz bir dizin alanı oluşturabiliriz. Bunun için belgeyi, ekleme sorgusu aşağıdaki gibi verilen “adaylar” olan yeni koleksiyona ekliyoruz:







Örnek 1: Tek Bir Alanın Benzersiz Dizinini Oluşturma

CreateIndex() yöntemini kullanarak indeks oluşturabiliriz ve benzersiz seçeneği Boolean “true” ile belirterek o alanı benzersiz hale getirebiliriz.



db.candidates.createIndex( { not: 1 }, { benzersiz: doğru } )

Burada, belirli bir alanın benzersiz bir dizinini oluşturmak için “adaylar” koleksiyonu üzerinde createIndex() yöntemini başlatıyoruz. Daha sonra indeks spesifikasyonu için “grade” alanına “1” değerini veriyoruz. Buradaki “1” değeri koleksiyonun artan indeksini temsil etmektedir. Daha sonra, “grade” alanının benzersizliğini sağlamak için “true” değeriyle “unique” seçeneğini belirliyoruz.



Çıktı, 'not' alanındaki benzersiz dizinin 'adaylar' koleksiyonu için oluşturulduğunu temsil eder:





Örnek 2: Birden Fazla Alanın Benzersiz Dizinini Oluşturma

Önceki örnekte benzersiz dizin olarak yalnızca tek bir alan oluşturulmuştur. Ancak createIndex() yöntemini kullanarak aynı anda iki alanı benzersiz bir dizin olarak da oluşturabiliriz.



db.candidates.createIndex( { not: 1 , kurs: 1 }, { benzersiz: doğru } )

Burada aynı “adaylar” koleksiyonu üzerinde createIndex() metodunu çağırıyoruz. createIndex() yöntemine, ilk ifade olarak “1” değeriyle “grade” ve “course” olmak üzere iki alan belirtiyoruz. Daha sonra bu iki benzersiz alanı oluşturmak için benzersiz seçeneğini “true” değeriyle ayarlıyoruz.

Çıktı, aşağıdaki 'adaylar' koleksiyonu için 'grade_1' ve 'course_1' olmak üzere iki benzersiz dizini temsil eder:

Örnek 3: Alanların Bileşik Benzersiz Dizinini Oluşturma

Ancak aynı koleksiyon içerisinde aynı anda benzersiz bir bileşik indeks de oluşturabiliriz. Bunu aşağıdaki sorgu aracılığıyla başarıyoruz:

db.candidates.createIndex( { isim: 1 , seviye: 1 , kurs: 1 }, { benzersiz: doğru }

“Adaylar” koleksiyonu için bileşik benzersiz dizin oluşturmak amacıyla createIndex() yöntemini tekrar kullanıyoruz. Bu sefer, 'adaylar' koleksiyonu için artan indeks alanları görevi gören 'sınıf', 'isim' ve 'kurs' olmak üzere üç alanı geçiyoruz. Daha sonra, bu seçeneğe karşı “true” atandığı için alanı benzersiz kılmak için “unique” seçeneğini çağırıyoruz.

Çıktı, üç alanın tamamının artık belirtilen koleksiyonun benzersiz dizini olduğunu gösteren sonuçları görüntüler:

Örnek 4: Yinelenen Alan Değerlerinden Benzersiz Bir Dizin Oluşturma

Şimdi, benzersizlik kısıtlamasını korumak için bir hatayı tetikleyen yinelenen alan değeri için benzersiz bir dizin oluşturmaya çalışıyoruz.

db.candidates.createIndex({isim: 1 },{benzersiz:doğru})

Burada benzer değerleri içeren alan için benzersiz indeks kriterlerini uyguluyoruz. createIndex() metodunun içerisinde “name” alanını “1” değeriyle çağırarak benzersiz bir indeks haline getiriyoruz ve benzersiz seçeneği “true” değeriyle tanımlıyoruz. İki belgenin 'ad' alanı aynı değerlere sahip olduğundan, bu alanı 'adaylar' koleksiyonunun benzersiz bir dizini yapamayız. Yinelenen anahtar hatası, sorgunun yürütülmesiyle tetiklenir.

Beklendiği gibi, ad alanı iki farklı belge için aynı değerlere sahip olduğundan çıktı sonuçları üretir:

Böylece belgedeki her “name” alanına benzersiz bir değer vererek “adaylar” koleksiyonunu güncelliyoruz ve ardından benzersiz dizin olarak “name” alanını oluşturuyoruz. Bu sorgunun yürütülmesi genellikle aşağıda gösterildiği gibi benzersiz dizin olarak 'ad' alanını oluşturur:

Örnek 5: Eksik Alanın Benzersiz Dizinini Oluşturma

Alternatif olarak, koleksiyondaki hiçbir belgede bulunmayan alana createIndex() yöntemini uyguluyoruz. Sonuç olarak, dizin bu alana karşı boş bir değer saklar ve alanın değerine yönelik bir ihlal nedeniyle işlem başarısız olur.

db.candidates.createIndex( { e-posta: 1 }, { benzersiz: doğru } )

Burada “email” alanının “1” değeri ile sağlandığı createIndex() metodunu kullanıyoruz. 'E-posta' alanı 'adaylar' koleksiyonunda mevcut değildir ve benzersiz seçeneği 'true' olarak ayarlayarak bu alanı 'adaylar' koleksiyonu için benzersiz bir dizin yapmaya çalışıyoruz.

Bunun için sorgu çalıştırıldığında “adaylar” koleksiyonunda “e-posta” alanı eksik olduğundan çıktıda hata alıyoruz:

Örnek 6: Seyrek Seçenekli Bir Alanın Benzersiz Dizinini Oluşturma

Daha sonra seyrek seçeneğiyle benzersiz dizin de oluşturulabilir. Seyrek dizinin işlevi, yalnızca dizinlenmiş alana sahip belgeleri içermesi, dizinlenmiş alana sahip olmayan belgeleri hariç tutmasıdır. Seyrek seçeneği ayarlamak için aşağıdaki yapıyı sağladık:

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

{ isim: 'unique_sparse_course_index' , benzersiz: doğru, seyrek: doğru } )

Burada “course” alanının “1” değeri ile ayarlandığı createIndex() metodunu sağlıyoruz. Bundan sonra, benzersiz bir indeks alanı olan “course” ayarlamak için ek seçeneği belirliyoruz. Seçenekler, “unique_sparse_course_index” dizinini ayarlayan “ad”ı içerir. Daha sonra “true” değeriyle belirtilen “unique” seçeneğimiz var ve “sparse” seçeneği de “true” olarak ayarlanmış.

Çıktı, aşağıda gösterildiği gibi 'kurs' alanında benzersiz ve seyrek bir dizin oluşturur:

Örnek 7: GetIndexes() Yöntemini Kullanarak Oluşturulan Benzersiz Dizini Gösterme

Önceki örnekte, sağlanan koleksiyon için yalnızca benzersiz bir dizin oluşturuldu. 'Adaylar' koleksiyonunun benzersiz dizinleri hakkındaki bilgileri görüntülemek ve almak için aşağıdaki getIndexes() yöntemini kullanırız:

db.candidates.getIndexes();

Burada “adaylar” koleksiyonundaki getIndexes() fonksiyonunu çağırıyoruz. getIndexes() işlevi, önceki örneklerde oluşturduğumuz 'adaylar' koleksiyonunun tüm dizin alanlarını döndürür.

Çıktı, koleksiyon için oluşturduğumuz benzersiz dizini görüntüler: benzersiz bir dizin, bileşik dizin veya benzersiz seyrek dizin:

Çözüm

Koleksiyonun belirli alanları için benzersiz bir dizin oluşturmaya çalıştık. Tek bir alan ve birden çok alan için benzersiz bir dizin oluşturmanın çeşitli yollarını araştırdık. Ayrıca benzersiz bir kısıtlama ihlali nedeniyle işlemin başarısız olduğu benzersiz bir dizin oluşturmaya çalıştık.