2012-09-28 8 views
6

私はサブ文書を持つmongooseスキーマを持っています。親スキーマと子スキーマには、事前セーブフックがあります。例えば:私はこのコードを実行すると2番目の保存操作で呼び出されないサブ文書のMongoose事前保存ミドルウェア

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 } ] } 

フック保存前の第二保存操作にサブ文書のために実行されていない理由は、任意の理由は?

答えて

11

これは、あなたがこれを行うせることで、V3.2.0に固定されている:

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

感謝を!それは3.2.0 – bryanpackman

+0

で働いたupvoteも歓迎されるだろう;) – staackuser2

+0

私は13のrepポイントを今得た。私は2つを取得するとすぐに、私はあなたの答えを投票します。 – bryanpackman

関連する問題