2015-01-04 3 views
0
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

Lo-Dash를 사용해보십시오는 확장 :

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

가 나 : 'candidateProfile.Skills = _.extend (candidateProfile.Skills, req.body.Skills을),' – teleaziz

+1

당신이 teleaziz 감사합니다, 당신은 우리에게 많은 시간을 저장 :) – Vineet

+0

내가 가진 큰 candidateProfile 스키마 candidateProfile ({ 기술 : {....} 기타 : [{ typeExp : 문자열, 조직 : 문자열, 의 startDate : 문자열, endDate가 : 문자열, 역할 : 문자열, 설명 : 문자열, 업적 : 문자열 }], // 추가 필드 기본적으로 Skills 나 Other Exp 같은 각 파트를 각각 업데이트합니다. 위의 기술 부분에서 제안 된 병합을 사용하면 위대한 기능을 발휘합니다. 위와 같이 다른 Exp에 대해 동일한 코드를 사용하려고하면 동일한 데이터로 2 행을 얻습니다. 문제가 보입니까? – Vineet

0

가 왜 몽구스 업데이트 및 $ 설정을 사용하지 않는? 당신은 단지 기술을 업데이트 할 경우

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