Node.js mongoose嵌入式文档主细节回调序列

Node.js mongoose嵌入式文档主细节回调序列,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我尝试在子项的预保存钩子中执行一些操作,但它似乎从未被触发。我只会让大师的预救钩被解雇 我的Javascript模型 var mongoose = require('mongoose'); mongoose.connect("localhost","test_master_details"); var masterSchema = mongoose.Schema({ title:{type:String,required:true}, childs: [childSchema]

我尝试在子项的预保存钩子中执行一些操作,但它似乎从未被触发。我只会让大师的预救钩被解雇

我的Javascript模型

    var mongoose = require('mongoose');
mongoose.connect("localhost","test_master_details");

var masterSchema = mongoose.Schema({
  title:{type:String,required:true},
  childs: [childSchema]
});

masterSchema.pre('save',function(next){
  console.log("master pre save called!");
  console.log(this);
  next();
});

var childSchema = mongoose.Schema({
  number:{type:Number},
  name: {type:String,required:true}

});

childSchema.pre('save',function(next){
  this.number = 1;
  //set number with the total number of childs for the parent master
  console.log('child pre save called!');
  console.log(this);
  next();
});



module.exports = [mongoose.model('Child',childSchema), mongoose.model('Master',masterSchema)];
我在咖啡脚本中的规格:

 model_container = require('../models/master')

Master = model_container[1]
Child = model_container[0]
should = require('should')

describe "Master model",->
  before (done) ->
    Master.remove {},(err) ->
      console.log err if err
      done()
  it "should be able to create an instance",(done)->
    master = new Master {title:"Master of command"}
    master.save (err) ->
      console.log err if err
      should.exist master
      done()
  it "should be able to add 1 child", (done)->
    master= new Master {title:"Master of command"}
    master.childs.push {name:"hello world"}
    master.save (err) ->
      console.log err if err
      master.childs.length.should.eql 1
      done()
  it "should be able to add 1 child with create method",(done) ->
    master = new Master {title:"Master of command"}
    child = new Child {name:"childs name"}
    master.childs.push child
    master.save (err) ->
      console.log err if err
      master.childs.length.should.eql 1
      done()
以下是我的规格结果,从未调用childs的预保存:

 Master model
    ◦ should be able to create an instance: master pre save called!
{ title: 'Master of command',
  _id: 50322715672b424e11000001,
  childs: [] }
    ✓ should be able to create an instance 
    ◦ should be able to add 1 child: master pre save called!
{ title: 'Master of command',
  _id: 50322715672b424e11000002,
  childs: [ { name: 'hello world' } ] }
    ✓ should be able to add 1 child 
    ◦ should be able to add 1 child with create method: master pre save called!
{ title: 'Master of command',
  _id: 50322715672b424e11000003,
  childs: [ { name: 'childs name', _id: 50322715672b424e11000004 } ] }
    ✓ should be able to add 1 child with create method 


  ✔ 3 tests complete (20ms)
我错过什么了吗?根据我的理解,每当我将孩子添加到集合中并在后记中保存时,孩子应该预先保存火。我做错了什么?我可以将子对象添加到masters集合并基于masters值预设值吗


感谢您的帮助…

主模式中引用之前,您需要先定义
儿童模式
,因此请将其切换为:

var childSchema = mongoose.Schema({
  number:{type:Number},
  name: {type:String,required:true}

});

childSchema.pre('save',function(next){
  this.number = 1;
  //set number with the total number of childs for the parent master
  console.log('child pre save called!');
  console.log(this);
  next();
});

var masterSchema = mongoose.Schema({
  title:{type:String,required:true},
  childs: [childSchema]
});

masterSchema.pre('save',function(next){
  console.log("master pre save called!");
  console.log(this);
  next();
});

好问题,我喜欢包含的测试用例。我记得不久前子/子文档的中间件被破坏了,但新的mongoose文档似乎承诺这是可行的。您可以创建一个github问题,并将人员指向此处。