Mongoose findOneAndUpdate Yeni Kayıtı Geri Dönderme

Mongoose findOneAndUpdate Güncellenen Belgeyi Geri Dönmüyor

Mongoose findOneAndUpdate kullanarak bir belge güncellendiğinde geriye kayıtın eski hali dönüyor. Eğer belgenin yeni halinin geri dönmesi isteniyorsa bunun bildirilmesi gereklidir.

Normal bir findOneAndUpdate işlemini şu şekilde yapıyoruz.

    Model.findOneAndUpdate({
        sorgu,
        guncelleme,
        secenekler
    })

Burada

  • sorgu arama kriterlerini belirten bölümdür.
  • guncelleme kriterlere uyan kayıt üzerinde yapılacak değişikliklerdir.
  • secenekler ise bu işlem için kullanılan ek parametrelerdir.

Mesela üye kayıtları içerisinden üye eposta değerine göre bir üye aratıp, sonrasında onun yaşını değiştirmek istersek.

Önce üye bilgilerinin şöyle olduğunu varsayalım.

{
    isim: "Ahmet Koşar",
    email: "ahmetkosar@uyemail.com",
    yas: 23
}

Ve üye yaşını değiştirmek isteyelim.

const uye = Uye.findOneAndUpdate({
        email: "ahmetkosar@uyemail.com"
    }, {
        yas: 29,
    }
});

Böyle bir işlem yapıldığında uye değişkenine güncelleme yapılmadan önceki üye bilgileri atanır.

Şuan uye değişkeninin değeri

{
    isim: "Ahmet Koşar",
    email: "ahmetkosar@uyemail.com",
    yas: 23
}

şeklindedir. Yani eski halinde. Peki biz eski değeri değilde güncellenen değeri almak istiyorsak. O zaman parametre olarak new: true değerini girmemiz gerekiyor.

Aynı işlemi tekrardan yapalım.

Önce üye bilgilerinin şöyle olduğunu varsayalım.

{
    isim: "Ahmet Koşar",
    email: "ahmetkosar@uyemail.com",
    yas: 23
}

Ve üye yaşını değiştirmek isteyelim.

const uye = Uye.findOneAndUpdate({
        email: "ahmetkosar@uyemail.com"
    }, {
        yas: 29,
    },
    {
        new: true
    }
});

Şuan uye değişkeninin değeri

{
    isim: "Ahmet Koşar",
    email: "ahmetkosar@uyemail.com",
    yas: 29
}

şeklinde olacaktır.

Sonuç

Mongoose findOneAndUpdate metodu kullanıldığında, geriye eski kayıt döner, eğer güncellenen değerin geri dönderilmesi istenirse new: true parametresinin verilmesi gerekir.

Sizin de eklemek istediğiniz bu tip incelikleri yorumlardan bizimle paylaşabilirsiniz.

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir