我试图使用Mongoose更新数组中的值,我创建的表在下面给出
var newUser = User({
name : 'XXX',
userName : 'XXX',
password : 'XXX',
admin : true,
location : 'KKK',
studentDeatails : [
{
name : 'AAA',
study : {
dept : 'CSE',
course : 'B.E',
year : 4
}
},
{
name : 'BBB',
study : {
dept : 'EEE',
course : 'B.E',
year : 3
}
}
],
createdAt: Date(),
updatedAt: Date()
});
结果:
[ { _id: 57c42dd22842e7561e8b9612,
name: 'XXX',
userName: 'XXX',
password: 'XXX',
admin: true,
location: 'KKK',
createdAt: 2016-08-29T12:42:58.000Z,
updatedAt: 2016-08-29T12:42:58.000Z,
studentDeatails: [ { name: 'AAA',
_id: 57c42dd22842e7561e8b9614,
study: { dept: 'CSE', course: 'B.E', year: 4 } },
{ name: 'BBB',
_id: 57c42dd22842e7561e8b9613,
study: { dept: 'EEE', course: 'B.E', year: 3 } } ] } ]
我试图更新dept的值:'EEE' -> dept: 'MECH'
我的预期答案应该是:
[ { _id: 57c42dd22842e7561e8b9612,
name: 'XXX',
userName: 'XXX',
password: 'XXX',
admin: true,
location: 'KKK',
createdAt: 2016-08-29T12:42:58.000Z,
updatedAt: 2016-08-29T12:42:58.000Z,
studentDeatails: [ { name: 'AAA',
_id: 57c42dd22842e7561e8b9614,
study: { dept: 'CSE', course: 'B.E', year: 4 } },
{ name: 'BBB',
_id: 57c42dd22842e7561e8b9613,
study: { dept: 'MECH', course: 'B.E', year: 3 } } ] } ]
我尝试的代码是:
User.findOneAndUpdate(
{ name: 'XXX', 'studentDeatails.study.year': 3 },
{ "$set": { 'studentDeatails.0.study.$.dept' : 'MECH' } },
function(err){
if(err){
console.log(err);
} else {
console.log("Successfully Updated");
}
}
);
请使用Mongoose纠正我做错的事情,这将是非常有帮助的!
答案 0 :(得分:2)
由于study
字段是子文档,因此无需应用位置 $
运算符,因为它仅适用于数组中的嵌入文档。它应该应用于studentDeatails
(原文如此)数组字段。所以你的更新应该只是:
User.findOneAndUpdate(
{ "name": "XXX", "studentDeatails.study.year": 3 },
{ "$set": { "studentDeatails.$.study.dept" : "MECH" } },
function(err){
if(err){
console.log(err);
} else {
console.log("Successfully Updated");
}
}
);