【发布时间】:2016-07-30 00:12:11
【问题描述】:
我有一个包含“爱好”对象的用户列表。
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);
}
});
但是,使用此代码,每次我调用该函数时,我的“新”爱好都会取代第一个。
我能做什么?
【问题讨论】:
-
我可能是错的,但你的对象结构也似乎有点不对劲。应该更接近:用户:{名称:John Doe,爱好:[{hobby_id:77777,hobby_name:曲棍球,hobby_type:运动},{hobby_id:88977,hobby_name:唱歌,hobby_type:人才},]年龄:27 }
-
User.findOne是一个异步操作,你不能在调用findOne后立即使用user对象,你应该在回调中这样做或使用承诺。因此你找不到用户,你的代码只是更新用户集合中的第一个对象。