Comment mettre à jour un object spécifique dans un tableau d’objects dans Node.js et Mongoose

Je suis nouveau sur node.js venant de l’expérience java. J’ai une situation que j’essaie de comprendre. Ma stack est express.js, mongoose, modèle ejs. Voici mon scénario: j’ai un schéma:

var UserSchema = mongoose.Schema({ name: { type: Ssortingng, index: true }, password: { type: Ssortingng, select: false }, email: { type: Ssortingng }, academic: [{ qualification: Ssortingng, institute: Ssortingng, from: Ssortingng, to: Ssortingng, about: Ssortingng }] 

});

il y a une liste d’universitaires. Je souhaite mettre à jour un seul object académique de cette liste. Comment pourrais-je m’y prendre?

 router.post('/academic/schools/update', function (req, res) { 

});

Je transmets les valeurs du modèle ejs à la route et les récupère dans req.body. Comment un nœud et une mongoose interrogeraient-ils cet object spécifique dans la route, puis mettront à jour leurs valeurs? J’ai pensé à peut-être append un identifiant à l’object académique pour pouvoir garder trace de la mise à jour.

Chaque sous-document académique aura un _id après avoir sauvegardé. Vous pouvez le faire de deux manières. Si vous transmettez l’identifiant de l’utilisateur et l’identifiant de l’identifiant de sous-doc académique dans l’URL ou le corps de la requête, vous pouvez mettre à jour de la manière suivante:

 User.findById(userId).then(user => { let academic = user.academic.id(academicId); academic.qualification = 'something'; return user.save(); }); 

Si vous ne transmettez que l’id du sous-doc académique, vous pouvez le faire comme ceci:

 User.findOne({'academic._id': academicId}).then(user => { let academic = user.academic.id(academicId); academic.qualification = 'something'; return user.save(); }); 

Notez que les tableaux de sous-documents renvoyés par mongoose sont des mongoosearray au lieu du type de données de tableau natif. Ainsi, vous pouvez les manipuler à l’aide de la méthode .id .push .pop .remove, méthode http://mongoosejs.com/docs/subdocs.html