J'ai un schéma mangouste qui ressemble à ceci:Comment marquer un élément spécifique d'un tableau de sous-document tel que modifié dans mongoose?
let ChildSchema = new Schema({
name:String
});
ChildSchema.pre('save', function(next){
if(this.isNew) /*this stuff is triggered on creation properly */;
if(this.isModified) /* I want to trigger this when the parent's name changes */;
next();
});
let ParentSchema = new Schema({
name: String,
children: [ChildSchema]
});
Les choses isNew
fonctionne comme prévu, mais je veux marquer les éléments du tableau réel de children
tel que modifié de sorte que la substance isModified
est déclenchée à tout moment les changements de nom du parent . Je ne suis pas sûr de savoir comment faire ça.
J'ai essayé:
ParentModel.findById(id)
.then((parentDocument) => {
parentDocument.name = 'mommy'; //or whatever, as long as its different.
if(parentDocument.isModified('name')){
//this stuff is executed so I am detecting the name change.
parentDocument.markModified('children');//probably works but doesn't trigger isModified on the actual child elements in the array
for(let i=0; i < parentDocument.children.length; i++){
parentDocument.markModified('children.'+i);//tried this as I thought this was how you path to a specific array element, but it has no effect.
}
parentDocument.save();//this works fine, but the child elements don't have their isModified code executed in the pre 'save' middleware
}
});
Ma question - comment les éléments du tableau ne vous marquer spécifiques (ou tous) d'un sous-document tel que modifié de sorte que leur propriété isModified
sera vrai? Notez que mon intergiciel de pré-sauvegarde est bien exécuté, mais aucun des éléments n'a isModified === true
;