Mongoose findByIdAndUpdate doğru modeli döndürmüyor


105

Geri aramada doğru modeli döndürmeyen Mongoose findByIdAndUpdate ile daha önce görmediğim bir sorun var.

İşte kod:

    var id = args._id;
    var updateObj = {updatedDate: Date.now()};
    _.extend(updateObj, args);

    Model.findByIdAndUpdate(id, updateObj, function(err, model) {
        if (err) {
            logger.error(modelString +':edit' + modelString +' - ' + err.message);
            self.emit('item:failure', 'Failed to edit ' + modelString);
            return;
        }
        self.emit('item:success', model);
    });

Veri tabanındaki orijinal belge şuna benzer:

{
    _id: 1234
    descriptors: Array[2],
    name: 'Test Name 1'
}

UpdateObj şu şekilde görünür:

{
    _id: 1234
    descriptors: Array[2],
    name: 'Test Name 2'
}  

Geri aramadan döndürülen model, updatedObj ile değil, orijinal modelle aynıdır. Veritabanını sorgularsam, doğru şekilde güncellendi. Sadece veritabanından dönmüyor.

Bu bir 'aptal kullanıcı' hatası gibi geliyor, ancak göremiyorum. Herhangi bir fikir çok takdir edildi.


1
Bu harika bir yer. Ve bu paket kendi birim testlerinden geçtiği için tüm projelerimi sürümlerle uyumlu tutmam gerektiğini hatırlatan bir şey. Teşekkür ederim.
JonRed

Yanıtlar:


306

Mongoose 4.0'da, (ve ) newseçeneğinin varsayılan değeri olarak değiştirildi ( sürüm notlarında # 2262'ye bakın ). Bu , güncelleme uygulandıktan sonra dokümanın yeni sürümünü alma seçeneğini açıkça ayarlamanız gerektiği anlamına gelir :findByIdAndUpdatefindOneAndUpdatefalsetrue

Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {...

5
Ayrıca, 'create' yönteminin dönüş değerlerinde yapılan değişikliklerden de etkilenmiştir. Şerefe dostum, eğer yapabilseydim iki kez oy kullanırdım.
JonRed

4
Ayrıca firavun faresi projesiyle ilgili güncellenmiş dokümanlar için bir PR ekleyin, bu yüzden umarım başka kimseyi yakalamaz.
JonRed

3
Oh oğlum teşekkür ederim @JohnnyHK. Bu beni mahvetti. Elbette yenisini geri istiyorum. API ile daha tutarlı olabilir, ancak sağduyu ile değil ... bir şeyi güncellersem değişiklikleri görmek isterim. Teşekkürler mongoose ...
Peege151

23
Vaov! Ne korkunç bir karar verdiler! Bulmayı güncelleme yerine ilk etapta yapmanın tek noktası budur.
Adam Lockhart

10
Birisinin yanıtta yeni yerine eski belgeyi neden tercih ettiğini anlamıyorum
emilioriosvz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.