【问题标题】:Mongoose pre save middleware of subdocument not called on second save operation在第二次保存操作中未调用子文档的 Mongoose 预保存中间件
【发布时间】:2012-09-20 18:26:52
【问题描述】:

我有一个带有子文档的猫鼬模式。父模式和子模式都有预保存挂钩。例如:

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

为什么在第二次保存操作中没有为子文档运行预保存挂钩?

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    这在 v3.2.0 中已修复,允许您执行以下操作:

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

    【讨论】:

    • 我现在只有 13 个代表点。一旦我再得到 2 个,我就会投票赞成你的答案。
    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 2015-11-08
    • 2016-02-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2017-10-06
    • 2015-07-03
    相关资源
    最近更新 更多