我是来自Java经验的node.js的新手。我有一种情况想尽我所能。我的堆栈是express.js,猫鼬,ejs模板。这是我的场景:我有一个架构:
var UserSchema = mongoose.Schema({
name: {
type: String,
index: true
},
password: {
type: String,
select: false
},
email: {
type: String
},
academic: [{
qualification: String,
institute: String,
from: String,
to: String,
about: String
}]
});
这里有一个学者名单。我只想更新该列表中的一个学术对象。我将如何处理?
router.post('/academic/schools/update', function (req, res) {
});
我将ejs模板中的值传递到路由中,并在req.body中获取值。我如何在节点和猫鼬中查询路线中的特定对象,然后更新其值。我曾考虑过可能在学术对象中添加一个ID,以便能够跟踪要更新的对象。
保存后,每个学术子文档都会有一个_id。有两种方法可以做到这一点。如果您在url或请求正文中传递用户ID和学术子文档ID,则可以这样更新:
User.findById(userId).then(user => {
let academic = user.academic.id(academicId);
academic.qualification = 'something';
return user.save();
});
如果仅传递学术子文档的ID,则可以这样进行操作:
User.findOne({'academic._id': academicId}).then(user => {
let academic = user.academic.id(academicId);
academic.qualification = 'something';
return user.save();
});
请注意,从猫鼬返回的子文档数组是mongoosearray而不是本机数组数据类型。因此,您可以使用.id .push .pop .remove方法http://mongoosejs.com/docs/subdocs.html来操纵它们
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句