7

サブドキュメントのあるマングーススキーマがあります。親スキーマと子スキーマの両方に事前保存フックがあります。例えば:

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

2回目の保存操作でサブドキュメントに対して事前保存フックが実行されない理由は何ですか?

4

1 に答える 1

14

これは、v3.2.0で次のように修正されています。

doc.children.set(0, {x: 43})
doc.save()
于 2012-09-29T00:25:29.110 に答える