Resim

PyMongo ile Belge Güncellemek (update)

PyMongo ile Belge Güncellemek (update)

Veriler nadiren sabittir. MongoDB'de var olan bir belgenin alanlarını değiştirmek için PyMongo'nun update_one() ve update_many() metotları kullanılır.

Güncelleme işlemleri üç ana bölümden oluşur:

  1. Filtre (Query): Hangi belgelerin güncelleneceğini belirler.

  2. Güncelleme Operatörü: Hangi alanın nasıl değiştirileceğini belirler (örneğin, $set, $inc).

  3. Değerler: Alanlara atanacak yeni değerler.

Koleksiyon ve Bağlantı

Güncelleme işlemlerini kitaplar koleksiyonu üzerinde gerçekleştireceğiz:

from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')
db = client['proje_db']
kitaplar_col = db['kitaplar'] 

1. Tek Bir Belge Güncelleme (update_one)

Filtreye uyan belgelerden yalnızca ilkini güncellemek için update_one() metodu kullanılır.

Örnek: $set Operatörü Kullanımı

En yaygın güncelleme operatörü $set'tir. Bu operatör, belirtilen alanı/alanları yeni değerle değiştirir. Eğer alan yoksa, onu oluşturur.

# 1. Filtre: Yazar adı 'Ahmet Bilgin' olan ilk kitabı bul
filtre = {"yazar": "Ahmet Bilgin"}
# 2. Güncelleme Operatörü: Yayınevini değiştir, yeni bir alan (indirim) ekle
guncelleme = {
    "$set": {
        "yayinevi": "Yeni Dönem Yayınları",
        "indirim": True # Yeni bir alan eklendi
    }
}
sonuc = kitaplar_col.update_one(filtre, guncelleme)
print("--- Tek Belge Güncelleme ($set) ---")
print(f"Eşleşen belge sayısı: {sonuc.matched_count}")
print(f"Güncellenen belge sayısı: {sonuc.modified_count}")
# Sonucu kontrol etmek için find_one() kullanabilirsiniz.

2. Birden Çok Belge Güncelleme (update_many)

Filtreye uyan tüm belgeleri aynı anda güncellemek için update_many() metodu kullanılır.

Örnek: $inc Operatörü Kullanımı

$inc (Increment) operatörü, sayısal bir alanın değerini belirtilen miktarda artırmak veya azaltmak için kullanılır.

Python

# 1. Filtre: Yılı 2023'ten büyük veya eşit (>=) olan tüm kitapları bul
coklu_filtre = {"yil": {"$gte": 2023}}

# 2. Güncelleme Operatörü: Stok miktarını 5 artır
coklu_guncelleme = {
    "$inc": {
        "stok": 5
    }
}
sonuc = kitaplar_col.update_many(coklu_filtre, coklu_guncelleme)

print("\n--- Çoklu Belge Güncelleme ($inc) ---")
print(f"Toplam {sonuc.matched_count} belge bulundu.")
print(f"Toplam {sonuc.modified_count} belge güncellendi (Stok 5 artırıldı).")

3. Diğer Yaygın Güncelleme Operatörleri

Operatör

Amacı

$unset

Belirtilen bir alanı belgeden tamamen kaldırır (siler).

$push

Bir dizi (array) alanına yeni bir öğe ekler.

$pull

Bir dizi (array) alanından, filtreye uyan tüm öğeleri siler.

Örnek: $unset ile Alan Kaldırma

Güncellediğimiz belgedeki indirim alanını kaldıralım:

# Filtre: indirim alanı olan belgeleri bul
unset_filtre = {"indirim": True}
# Güncelleme: indirim alanını kaldır
unset_guncelleme = {
    "$unset": {
        "indirim": "" # Değer boş bırakılır
    }
}
kitaplar_col.update_one(unset_filtre, unset_guncelleme)
print("\n--- Alan Kaldırma ($unset) ---")
print("'indirim' alanı ilk eşleşen belgeden kaldırıldı.")

Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Yazılım Nedir?

Python print()