2012-09-28 8 views
6

मेरे पास एक उप-दस्तावेज़ के साथ एक मोंगोस स्कीमा है। माता-पिता स्कीमा और बच्चे स्कीमा दोनों में पूर्व हुक बचा है। उदाहरण के लिए:मोंगोस प्री-डॉक्यूमेंट के मिडलवेयर को पूर्व सेव करें, जिसे दूसरे सेव ऑपरेशन पर नहीं कहा जाता है

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var SubSchema = new Schema({ x : Number }); 
SubSchema.pre('save', function (next) { 
    console.log("pre save Sub"); 
    next(); 
}); 

var MainSchema = new Schema({ x : Number, children : [SubSchema] }); 
MainSchema.pre('save', function (next) { 
    console.log("pre save Main"); 
    next(); 
}); 
var Main = mongoose.model('Main', MainSchema); 

var m = new Main(); 
m.children.push({ x : 42 }); 

m.save(function(err, doc) { 
    console.log(doc +"\n\n"); 
    doc.children[0].x = 43; 

    doc.save(function(err, doc2) { 
    console.log(doc2 + "\n\n"); 
    }); 
}); 

मुझे इस कोड चलाने के लिए, मैं निम्नलिखित उत्पादन प्राप्त करें:

pre save Sub 
pre save Main 
{ __v: 0, 
    _id: 50660b319aec895a50000002, 
    children: [ { x: 42, _id: 50660b319aec895a50000003 } ] } 


pre save Main 
{ __v: 0, 
    _id: 50660b319aec895a50000002, 
    children: [ { x: 43, _id: 50660b319aec895a50000003 } ] } 

किसी भी कारण है कि पूर्व हुक बचाने दूसरे ऑपरेशन को बचाने पर subdocument के लिए नहीं चल रहा है?

उत्तर

11

यह v3.2.0 में तय हो गई है, की अनुमति देकर आप यह करते हैं:

doc.children.set(0, {x: 43}) 
doc.save() 
+0

धन्यवाद! यह 3.2.0 – bryanpackman

+0

में काम करता था एक अपवर्तना भी सराहना की जाएगी;) – staackuser2

+0

मुझे अभी केवल 13 प्रतिनिधि अंक मिल गए हैं। जैसे ही मुझे 2 और मिलेंगे, मैं आपका जवाब वोट दूंगा। – bryanpackman

संबंधित मुद्दे