2013-08-12 21 views
8

Kirli bir pervane 'temiz' değeri böyle bir ön-kaydetme firavunfaresi kanca içinde ne olduğunu bilmek istiyorum kanca önceden kurtarmak db'ye bakmadan eski değer mi? Yani önceden kaydetmek kanca içindefiravunfaresi olsun db değeri

cevap

5

, ben this section of the source code okuyarak söyleyebilirim gelen, önceki değer herhangi bir yerde saklanır sanmıyorum. Bu yüzden belgeyi almak için belgeyi mongodb'den yüklemeniz gerekecek. Bununla birlikte, eski değeri yeni değere değiştirmeden önce saklamak için ön kaydetme kancası yerine virtuals mekanizmasını kullanmak isteyebilirsiniz.

var virtual = schema.virtual('password'); 
virtual.set(function (v) { 
    var this._oldPassword = this.password; 
    return v; 
}); 

Bu satırlardaki bir şeyle deneyin ve bir şeyin uygun şekilde çalışıp çalışmadığını görün. Varsayılan olarak

+0

neden ben 'path' vs bir' virtual' kullanmak önerirsin? 'Path' sadece adı ve bir veri özelliği türünü tanımlar – mkoryak

+0

için virtual'' oysa kodu koymak, alma/ayarlama yöntemleri vasıtasıyla erişilen bir özellik için imkan sağlar. –

+0

eski iplik diriltmeyi için üzgünüm @PeterLyons, Ama yük dengeleyici konuşlandırılmış çoklu düğüm sunucuları varsa bu yaklaşım doğru çalışmaz düşünüyorum? – Saurabh

19

, eski değerler saklanmaz. Yapmanız gereken eski bir gönderiyi bir init kancayla (bir mongoose özelliği) takip etmektir.

Yapmamız MongoDB çekilmiş tüm öğelere orijinal belgenin kopyasını ekleyin olduğunu. Biz karşılaştırma için önceden kirli veri almak için gereken her şema için bu kodu vardır:

schema.post('init', function() { 
    this._original = this.toObject(); 
}); 

NodeJS oldukça verimlidir ve mümkün olduğunda size sürece çift bellek tüketimini görmüyorum böylece, yazma üzerine kopyalama yok tüm belgeyi değiştir. Ancak o zaman, aslında, gerçekte belleği iki katına çıkarır.