Mongoose预存中间件的子文件没有调用第二次保存操作

我有一个带有子文档的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 } ] } 

为什么前保存钩子没有运行的第二个保存操作的子文档的任何原因?

这在v3.2.0中解决,让你这样做:

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