4

私はスキーマを持っています:

  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("");

    }

   });
   }

ユーザー名にインデックスがあります save() メソッドを使用してデータを保存しようとすると、次のエラーが発生します。

{ [MongoError: E11000 重複キー エラー インデックス: testdb.registerinfos.$username_1 重複キー: { : null }] name: 'MongoError', err: 'E11000 重複キー エラー インデックス: testdb.registerinfos.$username_1 重複キー: { : null }'、コード: 11000、n: 0、lastOp: 0、connectionId: 339527、ok: 1 }

4

2 に答える 2

4

registerinfos.username に一意の制約があり、データベースに既に存在するそのフィールドの値を持つドキュメントを保存しようとしています。例外にそう書いてあるので、私はこれを知っています ;) _id 値とは何の関係もありません。

于 2012-10-19T09:32:43.727 に答える
2

Sammaye が指摘したように、あなたのコードは呼び出されるたびに新しい RegisterInfo ドキュメントを作成しようとしていますsavePersonalInfo。この関数を使用して既存のドキュメントを更新する場合は、関数を変更する必要があります。

擬似コード:

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
        }
    }
});
于 2012-10-19T12:44:34.830 に答える