MongoDB Üzerinde Toplu Insert-Upsert-Merge-Delete Operasyonları

İlker Güldalı
inventiv
Published in
4 min readNov 13, 2020

Bu yazımızda MongoDB üzerinde bir csv dosyasından okuma yaparak toplu bir şekilde kayıt ekleme, birleştirme, güncelleme ve silme operasyonlarını ele alacağız.

Çalışma öncesinde bilgisayarınızda MongoDB Community Server, MongoDB Compass ve MongoDB Database Tools yazılımlarının kurulmuş olması gerekmektedir.

İndirme Linkleri:
MongoDB Community Server:
Local’imizde MongoDB database’i oluşturmamızı sağlar.

MongoDB Compass:
MongoDB GUI’ı olarak arayüz aracılığı ile database’leri ile daha kolay yönetmemize olanak tanır.

MongoDB Database Tools:
Sahip olduğumuz database üzerinde komut satırı aracılığı ile import, export ve tanı(diagnostic) operasyonların gerçekleştirilmesini sağlar.

Yazılım kurulumlarını yaptıktan sonra işlemlere başlamaya hazırız🎉

Anlatılacak olan operasyonlar örnek senaryolar üzerinden işlenecektir. Senaryolarla bağlantılı olarak ilgili csv dosyalarının düzenlenmesi gerekmektedir.

CSV Dosyasının Düzenlenmesi

Oluşturduğumuz csv dosyası üzerinde Database Tools ile işlem yapmadan önce belirli düzenlemeleri yapmamız gerekiyor. Bu noktada csv dosyasının ilk satırında ilgili collection’daki alan adları ve tipleri yazılır. Ek olarak bu örnekte birinci alan olan merchantId MongoDB tarafında unique index olarak belirlenmiştir.

Collection alanları ve tipleri

Dosyada headerline kısmını bu şekilde düzenledikten sonra yapacağımız Insert/Upsert/Merge/Delete işlemleri için MongoDB Database Tools içerisindeki mongoimport aracını kullanacağız. Terminal üzerinde aşağıdaki komuta benzer komutlar ile ilgili operasyonları gerçekleştireceğiz.

Terminal üzerinden çalıştırılacak komut

Komut üzerindeki parametreler yapacağımız Insert/Upsert/Merge/Delete operasyonlarına göre farklılık göstermektedir.

Parametreleri inceleyecek olursak;
--db: Kullanılan database adı
--collection: Üzerinde işlem yapılacak olan collection adı
--mode: Import edilecek dosyaya uygulanacak işlem türü. İşlem türleri: Insert, Upsert, Merge ve Delete olmak üzere 4 adettir. Default değeri ise Insert şeklindedir.

  • Insert: Dosyadaki kayıtların collection’a eklenmesini sağlar. Import sırasında unique index bazında çoklanmış veri ile karşılaşırsa hata fırlatır.
  • Upsert: Dosyadaki kayıtların collection üzerindeki eşleşen kayıtlar ile değiştirilmesi için kullanılır.
  • Merge: Dosyadaki kayıtların collection üzerindeki eşleşen kayıtlar ile birleştirilmesi için kullanılır.
  • Delete: Dosyadaki kayıtlarla collection üzerindeki eşleşen kayıtların silinmesi için kullanılır.

--upsertFields : Dosyadaki kayıtların collection üzerindeki kayıtlarla eşleşmesi sırasında kullanılacak olan alanları belirtir. Bu parametre --mode parametresi ile beraber kullanılmaktadır. Desteklenen modlar:upsert, mergeve delete şeklindedir.

--type: İçe aktarılacak olan dosya türünü belirtir. Varsayılan biçimi json’dur ancak csv ve tsv dosyalarını içe aktarmak mümkündür.

--columnsHaveTypes: Dosyadaki alanların belirli bir tipe sahip olduğunu belirtir. --fields, --fieldFileveya--headerline parametreleri ile beraber kullanılır.

--headerline: --type csv veya --type tsv ise ilk satırın header olarak işlenmesini sağlar. Aksi takdirde mongoimport ilk satırı ayrı bir kayıt olarak içe aktaracaktır. --type json olan bir import işlemi yapılırken --headerline eklenirse bu durum hataya sebep olacaktır.

--file: Import edilecek dosyanın konumunu ifade etmektedir.

Toplu Ekleme İşlemi(Insert)

Öncelikle import edilecek olan dosyada collection’a ait alanlar ve tipleri belirtilir. Burada ki örnek senaryomuzda 4 adet merchant database’imize eklenecektir.

Bu aşamada insert işlemini sağlayacak komut hazırlanır ve çalıştırılır.

İşlem başarılı olarak tamamlandığında MongoDB Compass uygulamasından üzerinde çalıştığımız database ve collection seçilir. Açılan ekranda aşağıdaki gibi collection’ımız oluşur ve csv dosyasından toplu kayıt ekleme işlemi tamamlanmış olur.

Toplu Ekleme-Güncelleme İşlemi(Upsert)

İşlemlere başlamadan önce upsert modu, import edilen dosyada verilen alanları ilgili kayıtlar için son hali olarak günceller. Öyle ki DB’de olupta dosya içerisinde olmayan bir alan olduğu durumda upsert işlemi sonucunda bu alan ilgili kayıt için silinmiş olacaktır.

Öncelikle upsert edilecek olan dosyada collection’a ait alanlar ve tipleri belirtilir.

Burada ki senaryoda bir önceki örnekten farklı olarak 3 numaralı merchantId’ye sahip kayıt için merchantCity silinerek ismi değiştirilir ve yeni merchantId’li kayıt eklenecektir.

Bu aşamada upsert işlemini sağlayacak komut hazırlanır ve çalıştırılır.

İşlem başarılı olarak tamamlandığında aşağıdaki gibi collection’ımız oluşur ve csv dosyasından toplu ekleme-güncelleme işlemi tamamlanmış olur.

Toplu Birleştirme İşlemi(Merge)

Merge modu ilgili kayıtlar için import edilecek olan dosyadaki alanlar ile var olan kayıtları günceller. Dosyadaki alanın kayıt üzerinde olmaması durumunda ise kayıt üzerinde ilgili alanı oluşturur.

Bu operasyonda birleştirilecek kayıtlar ilgili csv dosyasında alan ve tipleri ile hazırlanır.

Burada ki örnek senaryomuzda 1 ve 2 merchantId’li kayıtlar için merchantEmail alanı eklenir ve merchantCity bilgisi güncellenir. İşlem sırasında diğer alanlarda bir değişiklik olmayacaktır.

Birleştirme işlemini sağlayacak komut hazırlanır ve çalıştırılır.

İşlem başarılı olarak tamamlandığında aşağıdaki gibi collection’ımız oluşur ve csv dosyasından toplu birleştirme işlemi tamamlanmış olur.

Toplu Silme İşlemi(Delete)

Bu operasyonda silinecek olan kayıtlar ilgili csv dosyasında collection’a ait alanlar ve tipleri ile belirtilir.

Silme işlemini sağlayacak komut hazırlanır ve çalıştırılır.

İşlem başarılı olarak tamamlandığında aşağıdaki gibi collection’ımız oluşur ve csv dosyasından toplu silme işlemi tamamlanmış olur.

Sonuç olarak MongoDB üzerinde toplu bir şekilde dosyadan insert, upsert, merge ve delete operasyonlarının nasıl ele alındığını incelemiş olduk. Bu yazımızda csv dosyasından toplu bir şekilde operasyonları yürüttük. Sizde parametreler üzerinde küçük oynamalar yaparak desteklenen dosya tiplerinden biriyle işlemlerinizi basit bir şekilde yapabilirsiniz🥰

Okuduğunuz için teşekkürler…

Katkılarından dolayı Mücahit Ballı’ya teşekkürler.

--

--