2016-12-29 3 views
0

私は生徒の記録を保存しようとしていますが、重複した記録を取るべきではありません。どのように可能ですか?以下のコードで私はしようとしましたdbに保存する前に重複レコードの挿入を停止するにはどうすればいいですか?

app.post("/save",function(req,res){ 

    var std=new student(req.body); 
    student.findOne({},function(err,success){ 
     if(err) 
     { 
      console.log(err); 
     } 
     else 
     { 
      // console.log(success); 
      std.save(function(err,success){ 
      if(err) 
       { 
        console.log(err); 
       } 
      else 
       { 
        console.log("inserted"); 
        console.log(success); 
       } 
      }); 

     } 
    }) 
}); 
+1

?。それはずっと速いでしょう。重複を決定するフィールドにユニークなインデックスを作成します。これを確認してくださいhttps://docs.mongodb.com/manual/core/index-unique/#index-type-unique – RaR

+0

答えが有用かどうか疑問に思っていますか? – notionquest

答えて

0

ここにサンプルコードです。 MongoDBデータベースの値の存在は、OPで述べたようにreq.bodyに依存することに注意してください。

以下のコードでは、Studentコレクションには名前属性しかありません。したがって、重複チェックはname属性のみに基づいています。

コレクション内の特定の属性をチェックして重複値を確認する場合は、コードを変更する必要があります。

私のStudentコレクションには、スキーマ内の属性だけがあることに注意してください。

var express = require('express'); 
var MongoClient = require('mongodb').MongoClient; 

var mongoose = require('mongoose'); 

mongoose.connect('mongodb://localhost/test'); 
var Student = mongoose.model('Student', { name: String }); 
var app = express(); 

var bodyParser = require('body-parser'); 
var app = express(); 
var urlencoded_body_parser = bodyParser.urlencoded({ 
    extended: true 
}); 

app.use(bodyParser.json()); 
app.use(urlencoded_body_parser); 

app.post("/save", function (req, res) { 

    console.log(req.body); 
    var student = new Student(req.body); 
    Student.findOne(req.body, function (err, success) { 
     if (err) { 
      console.log(err); 
      res.send(err); 
     } 
     else { 
      console.log(success); 
      if (success == null) { 
       student.save(function (err, success) { 
        if (err) { 
         console.log(err); 
         res.send(err); 
        } 
        else { 
         console.log("inserted"); 
         console.log(success); 
         res.send("success"); 
        } 
       }); 

      } else { 
       res.send("Student already present"); 
      } 

     } 
    }) 
}); 

app.listen(3000); 

出力: -

初めて実行: -

入力: -

{ 
    "name" : "john" 
} 

出力: -

0同じ入力JSONと
success 

後続の実行: -

出力: - インデックスを使用しないのはなぜ

Student already present 
+0

あなたはname属性だけで済ませましたが、別の属性をチェックする必要があります – kishore

+0

はい、私は答えで同じことを言いました。現在、コードは要求本体のすべての属性をチェックします。また、私のスキーマとリクエスト本体には現在のところ1つの属性しかありません。上記のソリューションは、要件に基づいて使用および変更できるテンプレートです。 – notionquest

+0

@kishore複数の異なる属性をチェックする場合は、重要な要件です。コードを実行するために必要なものを正確に説明するために、質問を編集する必要があります。 –

関連する問題