2013-02-04 12 views
10

में लोड के बाद मॉडल मान बदलें मेरे मोंगोज़ मॉडल में, मेरे पास कुछ stats है जो समय पर निर्भर हैं। मेरा विचार मॉडल लोड होने के ठीक बाद इन आंकड़ों को बदलने के लिए middleware जोड़ना है।मोंगोस

दुर्भाग्यवश, post पर दस्तावेज़ - स्पष्टता में कुछ कमी है। ऐसा लगता है कि मैं इस तरह एक हुक का उपयोग कर सकते हैं:

schema.post('init', function(doc) { 
    doc.foo = 'bar'; 
    return doc; 
}); 

उनके केवल उदाहरण console.log -outputs शामिल है। यह किसी भी तरह से व्याख्या नहीं करता है अगर doc वापस किया जाना है या यदि हुक के बाद में परिवर्तन असंभव है (क्योंकि यह असीमित नहीं है, जटिल विचारों के लिए बहुत कम उपयोग हो सकता है)।

pre'init' पर लोड पर मॉडल को स्वचालित रूप से अपडेट करने का सही तरीका नहीं है, तो क्या है?

उत्तर

16

यह है कि हम कैसे लोड पर मॉडल एसिंक्रोनस रूप से काम कर रहा अद्यतन है:

schema.pre('init', function(next, data) { 
    data.property = data.property || 'someDefault'; 
    next(); 
}); 

पूर्व init खास है, अन्य हुक, एक अलग हस्ताक्षर है, उदाहरण के लिए पहले से बचाने के लिए:

schema.pre('save', function(next) { 
    this.accessed_ts = Date.now(); 
    next(); 
}); 
+2

तो डेटा लोड होने के बाद वास्तव में प्री-इनिट है? और दस्तावेज़ 'इस संदर्भ में नहीं है? – Lanbo

+3

डेटा लोड होने के बाद प्री-इनिट है, लेकिन * पहले * दस्तावेज़ उस डेटा (afaik) से हाइड्रेटेड है। चूंकि डेटा अभी तक दस्तावेज़ में नहीं रखा गया है, इसलिए "यह" संदर्भ मौजूद है (यह अभी भी दस्तावेज़ है) लेकिन यह खाली होगा (iirc)। – hunterloftis

+0

मेरी इच्छा है कि दस्तावेज़ों ने इसे समझाया। – binki