如何在保存db之前停止插入重复记录?

时间:2016-12-29 11:09:24

标签: mongodb mongoose

我试图保存学生的记录,但不应该重复记录。这怎么可能?在下面的代码我试图做

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 个答案:

答案 0 :(得分:0)

以下是示例代码。请注意,MongoDB数据库中存在的值取决于OP中提到的req.body

在下面的代码中,我在Student集合中只有name属性。因此,重复检查仅基于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"
}

<强>输出: -

success

使用相同输入json的后续执行: -

<强>输出: -

Student already present