2012-10-19 2 views
3

에 데이터를 저장하려고 할 때 내가 스키마가 (내가 저장하여 데이터를 저장하려고 할 때나는 중복 키 에러 인덱스를 얻고있다 : 나는 MongoDB를

var RegisterInfoSchema= new Schema({ 
    Organization:String, 
    NGOName:String, 
    Acronym:String, 
    Address:String, 
    Province:String, 
    District:String, 
    Tehsil:String, 
    Telephone_number:String, 
    Website:String, 
    Demographics:String, 
    Username:{type:String ,index: {unique:true}}, 
    Password:String 
    }) 

exports.savePersonalInfo = function (req,res){ 
console.log("savePersInfo CALLED"); 

var receivedObj = new RegisterInfo({ 
    Organization:   req.body.regOrgType , 
    NGOName:    req.body.regName, 
    Acronym:    req.body.regAcronym , 
    Address:    req.body.regAddress , 
    Province:    req.body.regProvince, 
    District:    req.body.regDistrict, 
    Tehsil:     req.body.regTehsil , 
    Telephone_number:  req.body.regTelNo , 
    Website:    req.body.regWebAddr, 
    Demographics:   req.body.regDemographics, 
    Username:    req.body.regUserName , 
    Password:    req.body.regPsw 
     }); 

    receivedObj.save(function(err){ 
    console.log("inside Save "); 
    if(err){       
     console.log(err); 
    } 
    else{ 
     console.log("Saved!!"); 
     res.send(""); 

    } 

    }); 
    } 

는 사용자 이름 에이 색인됩니다)

{[MongoError : E11000 키 에러 인덱스 복제 :. testdb.registerinfos을 $ 님 DUP 키 : {: 널 (null)}] 이름 : 'MongoError', 오류 : 'E11000 중복 메소드는 다음과 같은 오류를 제공 키 오류 인덱스 : testdb.registerinfos. $ username_1 dup 키 : {: null} ', 코드 : 11000, N : 0, lastOp : 0, connectionId : 339527, 확인 : 1}

+0

그것은 그 _id가 설정이고 그래서 내가 나 자신을 ID를 지정해야 새 행 – Sammaye

+0

이라고 생각 될 수 있을까요? @Sammaye – ana

+0

당신은 _id를 지정할 필요가 없습니다.이 오류가 발생했을 때 어떤 코드를 사용하고 있습니까? 새로운 행을 만들려고 할 때가 아니라고 확신합니까? 이후 새로운 행을 만들려고 할 때이 일이 발생한다면 그것은 ofc 색인의 becuae입니다. – Sammaye

답변

3

당신은 registerinfos.username에 고유 제한 조건을 가지고 있고 당신은이 문서를 저장하려는 데이터베이스에 이미있는 해당 필드의 값입니다. 나는 이것이 예외에서 말하는 것이기 때문에 이것을 안다;) _id 값과 아무런 관련이 없다.

+0

그의 원래 게시물이 모호했습니다. 그래서 그가 업데이트 중이라고 생각하고 예외를 던지고 있었으므로 원래 _id 값에 대해 생각한 이유입니다.하지만 이제는 코드로 새로운 행을 만듭니다. – Sammaye

+0

충분히 좋습니다. 업데이트 된 게시물은 확실한 것들을 분명히했습니다;) –

2

Sammaye에서 언급했듯이 코드는 savePersonalInfo이 호출 될 때마다 새 RegisterInfo 문서를 만들려고합니다. 이 기능을 사용하여 기존 문서를 업데이트하는 경우 해당 기능을 수정해야합니다. 의사 코드에서

:

RegisterInfo.findOne({Username: req.body.regUserName}, function (err, reginfo) { 
    if (!err) { 
     if (!reginfo) { 
      // Doesn't exist, create new doc as you're doing now 
     } else { 
      // Does exist, update reginfo with the values from req.body and then 
      // call reginfo.save 
     } 
    } 
}); 
관련 문제