更新保存部分数据

时间:2015-01-04 13:38:12

标签: node.js mongodb mongoose mean-stack nosql

var CandidateProfileSchema = new Schema({
  Skills: {
    programmingLang: [{text: String}],
    scriptingLang:  [{text: String}],
    tools:  [{text: String}],
    ide:  [{text: String}],
  },
  //more fields
});

exports.updateOptPrefs = function(req, res) {
  console.log( req.body );
  if(req.body._id) { delete req.body._id; }
  CandidateProfile.findOne({userId:req.params.id}, function (err, candidateProfile) {
    if (err) { return handleError(res, err); }
    if(!candidateProfile) { return res.send(404); }

    candidateProfile.Skills.programmingLang= req.body.Skills.programmingLang;
    candidateProfile.Skills.scriptingLang= req.body.Skills.scriptingLang;
    candidateProfile.Skills.tools=req.body.Skills.tools;
    candidateProfile.Skills.ide=req.body.Skills.ide;
    //.... other fields
    candidateProfile.save(function (err) {
      if (err) { return handleError(res, err); }
      return res.json(200, candidateProfile);
    });
  });
};

不知何故,这只是复制mongodb文档中的programmingLang字段。我们在这个问题上花了大约5个小时,如果有人能指出我们在这里犯的错误,我们会非常高兴。

2 个答案:

答案 0 :(得分:2)

尝试使用Lo-Dash extend:

var _ = require('lodash');
exports.updateOptPrefs = function(req, res) {
    if(req.body._id) { delete req.body._id; }
    CandidateProfile.findOne({userId:req.params.id}, function (err, candidateProfile) {
        if (err) { return handleError(res, err); }
        if(!candidateProfile) { return res.send(404); }
        candidateProfile = _.extend(candidateProfile, req.body);
        candidateProfile.save(function (err) {
            if (err) { return handleError(res, err); }
            return res.json(200, candidateProfile);
        });
    });
 };

答案 1 :(得分:0)

为什么不使用mongoose update和$ set?

CandidateProfile.update( {'userId' : req.params.id}, 
                         {$set : {Skills.programmingLang:req.body.Skills.programmingLang, ...}}, function(err){