MongooseJS modifier le document au cours de la pré crochet

Je vais avoir quelques problèmes avec la mangouste. Mon objectif est qu'au cours de la pré-enregistrer, je serais en mesure de modifier l'objet, en faisant des choses comme le fractionnement, les balises, si nécessaire, ou dans un autre cas, le calcul de la somme d'un sous-document de durées et de mise à jour dans le document principal.

Ce que je vais trouver, c'est que si je charge un modèle, puis d'appeler le doc.mise à jour de l'adoption de la nouvelle données, seulement schema.pre('update', ...) déclenche, et de toute modification de this dans mon middleware ne sont pas mis à jour. J'ai aussi essayé d'utiliser this.set('...', ....); dans ma mise à jour middleware en vain.

Il semble que si je ne doc.save(...) au lieu de cela, il passe ensuite à this dans schema.pre('save', ...) sont ajoutés comme prévu. Outre l'extension de la publication des variables dans mon propriétés du modèle et d'économie, je ne vois pas de toute façon de tirer parti des doc.mise à jour à cet effet.

Mes Objectifs:
- Mise à jour d'un document existant via doc.update(properties, ....)
- L'utilisation du middleware, lors de la sauvegarde de modifier le document, avancées de la validation et de mise à jour des documents connexes
- L'utilisation du middleware lors de la mise à jour pour modifier le document, avancées de la validation et de mise à jour des documents connexes
- Utiliser de façon interchangeable modèle.findByIdAndUpdate, modèle.enregistrer, modèle.findById->doc.mise à jour, modèle.findById->doc.enregistrer et tous les puiser dans ma sauvegarde/mise à jour le middleware.

Arbitraire exemple de code:

function loadLocation(c) {
var self = this;
c.Location.findById(c.params.id, function(err, location) {
c.respondTo(function(format) {
if (err | !location) {
format.json(function() {
c.send(err ? {
code: 500,
error: err
} : {
code: 404,
error: 'Location Not Found!'
});
});
format.html(function() {
c.redirect(c.path_to.admin_locations);
});
} else {
self.location = location;
c.next();
}
});
});
}
LocationController.prototype.update = function update(c) {
var location = this.location;
this.title = 'Edit Location Details';
location.update(c.body.Location, function(err) {
c.respondTo(function(format) {
format.json(function() {
c.send(err ? {
code: 500,
error: location && location.errors || err
} : {
code: 200,
location: location.toObject()
});
});
format.html(function() {
if (err) {
c.flash('error', JSON.stringify(err));
} else {
c.flash('info', 'Location updated');
}
c.redirect(c.path_to.admin_location(location.id));
});
});
});
};
module.exports = function(compound) {
var schema = mongoose.Schema({
name: String,
address: String,
tags: [{ type: String, index: true }],
geo: {
type: {
type: String,
default:
"Point"
},
coordinates: [Number] //Longitude, Latitude
}
});
schema.index({
geo: '2dsphere'
});
var Location = mongoose.model('Location', schema);
Location.modelName = 'Location';
compound.models.Location = Location;
schema.pre('save', function(next) {
if(typeof this.tags === 'string') {
this.tags = this.tags.split(',');
}
});
};

==== * mise à jour de l'échantillon * ====

module.exports = function(compound) {
var schema = mongoose.Schema({
name: String,
bio: String
});
schema.pre('save', function(next) {
console.log('Saving...');
this.bio = "Tristique sed magna tortor?"; 
next();
});
schema.pre('update', function(next) {
console.log('Updating...');
this.bio = "Quis ac, aenean egestas?"; 
next();
});
var Author = mongoose.model('Author', schema);
Author.modelName = 'Author';
compound.models.Location = Author;
};
InformationsquelleAutor user1363145 | 2013-08-14