2012-09-28 11 views
6

Ich habe ein Mungo-Schema mit einem Filialdokument. Sowohl das übergeordnete Schema als auch das untergeordnete Schema verfügen über Vorsicherungs-Hooks. Zum Beispiel:Mungo pre speichern Middleware von Filialdokument nicht bei zweiter Speicheroperation

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"); 
    }); 
}); 

Wenn ich diesen Code ausführen, bekomme ich die folgende Ausgabe:

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

Gibt es Gründe, warum die vorge speichern Haken nicht für das Filialdokument speichern läuft auf der zweiten Operation?

Antwort

11

Dies ist in v3.2.0 fixiert, indem wir Sie dies tun:

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

Dank! Das funktionierte in 3.2.0 – bryanpackman

+0

Ein upvote würde auch geschätzt werden;) – staackuser2

+0

Ich habe jetzt nur 13 rep Punkte. Sobald ich zwei weitere bekomme, werde ich deine Antwort abstimmen. – bryanpackman

Verwandte Themen