2012-03-11 25 views
5

mongoose.js kullanırken alanları izlemenin en iyi yolunu bulmaya çalışıyorum. Örneğin, bir nesne üzerindeki name alanı her ayarlandığında, { field: 'name', previous: 'foo', current: 'bar', date: '3/06/2012 9:06 am' } gibi görünen bir nesnenin (gömülü belge olarak) geçmişine yeni bir giriş eklemek istiyorum.İzleme mongoose.js alanlarındaki değişiklikleri izleme

.pre('save') numaralı çengellere takılan bir eklentiyi kullanmaya başladım ancak veritabanından eski değeri kapmadan ve bunları kendim karşılaştırmadan hangi alanların değiştirildiğini anlayamıyorum. Sonra özel setler kullanabileceğimi düşündüm, ama aynı soruna rastladım - hangi alanın değiştirildiğini bilmiyorum.

var comment = new Schema({ 
    name : { type: String, set: trackName }, 
    history : [Change] 
}); 

var trackName = function(val) { 
    var change = new Change; 
    change.field = 'name'; 
    change.previous = this.name; 
    change.current = val; 
    change.date = Date.now(); 
    this.history.push(change); 
    return val; 
} 

Ama bu ben izlemek istediğiniz her alan adı için özel ayarlayıcı gerektiği anlamına gelir: Şu anda ayarlayıcı içine bu hangi zor kodları alan adı böyle bir şey yaptığını başbaşa kaldım. Sanırım bunu başarmanın daha iyi bir yolu olmalı.

cevap

4

'Document.modifiedPaths' özledim gibi görünüyor. Bu, hangi alanların değiştirildiğini belirlemek için ihtiyacım olan şeyi yapar.

+3

Eski değerleri sadece nasıl değiştirilmişPaths kullanarak aldınız? –

+1

@ Totty.js Bu soruya rastlayan herkes için, mongoose şu anda eski değerleri otomatik olarak izlemiyor, ancak burada bir çözüm var: https://pste.me/#/FU1Kg – helion3

+0

@ helion3 bu bağlantının güncel olmadığını düşünüyor –