Mongoose findOne并保存新文件

时间:2016-04-08 16:19:18

标签: mongodb mongoose

我有一个用户列表,里面有'业余爱好'对象。

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);
                }
              });

但是,使用此代码,每当我调用该函数时,我的“新”爱好将取代第一个。

我能做什么?

2 个答案:

答案 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

相关问题