我有一个用户列表,里面有'业余爱好'对象。
User: {
name: John Doe,
hobby: {
[{hobby_id: 77777, hobby_name: hockey, hobby_type: sports}],
[{hobby_id: 88977, hobby_name: singing, hobby_type: talent}],
}
age: 27
}
现在我想找一个用户并在列表中添加新的爱好。我的第一次尝试是:
var user = User.findOne({ _id : req.body.user_id});
User.update(user, { hobby: [{ hobby_name: req.body.name ,
hobby_type: req.body.type }] },
function(err, user){
if(err){
return res.status(500).json(err);
}else{
return res.status(200).json(user);
}
});
但是,使用此代码,每当我调用该函数时,我的“新”爱好将取代第一个。
我能做什么?
答案 0 :(得分:1)
您的问题是您使用的是whe repalce语法,而不是更新语法。我想你需要:
user.hobbies.push({ hobby_name: req.body.name ,
hobby_type: req.body.type })
答案 1 :(得分:1)
您可以使用以下代码执行相同的操作。
User.findByIdAndUpdate(req.body.user_id, {$push:{ hobby: [{ hobby_name: req.body.name ,
hobby_type: req.body.type }] }}, {safe: true}
function(err, user){
if(err){
return res.status(500).json(err);
}else{
return res.status(200).json(user);
}
});
此处findByIdAndUpdate同时查找和更新同一文档。无需使用回调或承诺。请参阅以下link。