我有一个带有子文档的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,children: [ { x: 43,_id: 50660b319aec895a50000003 } ] }
在第二次保存操作的子文档没有运行预保存挂钩的任何原因?
解决方法
这是在v3.2.0中修复的,允许你这样做:
doc.children.set(0,{x: 43}) doc.save()