gpt4 book ai didi

node.js - 如何更新 Node.js 和 Mongoose 中对象数组中的特定对象

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:44 25 4
gpt4 key购买 nike

我是node.js的新手,有java经验。我遇到了一个我正在努力解决的情况。我的堆栈是express.js、mongoose、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 中的值。我如何在 Node 和 Mongoose 中查询路由中的特定对象,然后更新其值。我考虑过向学术对象添加一个 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();
});

请注意,从 mongoose 返回的子文档数组是 mongoosearray 而不是 native 数组数据类型。所以你可以使用 .id .push .pop .remove 方法 http://mongoosejs.com/docs/subdocs.html 来操作它们

关于node.js - 如何更新 Node.js 和 Mongoose 中对象数组中的特定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38507838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com