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