gpt4 book ai didi

javascript - Nodejs 应用程序抛出 E11000 重复键错误

转载 作者:行者123 更新时间:2023-11-28 05:36:56 25 4
gpt4 key购买 nike

当我在网页上输入数据时,数据会正确同步到数据库。
但是当我尝试再次填写相同的表格时,它给出了错误:

{
"code": 11000,
"index": 0,
"errmsg": "E11000 duplicate key error collection: test.creates index: aname_1 dup key: { : \"MicroSoft\" }",
"op": {
"aname":"MicroSoft",
"pname":"Bing",
"pusername":"Debtanu",
"_id":"57c9486d690a35fc21794169",
"__v":0
}
}

从数据库中删除所有内容并再次尝试填写相同的表单后,它会获取该条目。
那么为什么它不将下一个条目输入到同一帐户表单中?

下面是我的 app.js 和 Account.jade 文件。

app.js:

var express = require('express');
var favicon = require('serve-favicon');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
bodyParser = require('body-parser');
var session = require('express-session')
var mongoose = require('mongoose');
var nodemailer = require('nodemailer');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var bcrypt = require('bcrypt-nodejs');
var async = require('async');
var crypto = require('crypto');
var flash = require('express-flash');
var router = express.Router();
var fs = require('fs');


var createSchema = new mongoose.Schema({
cname: {type: String, unique: true, sparse: true},
aname : {type: String, unique: true, sparse: true},
ausername : String,
pname : {type: String, unique: true, sparse: true},
pusername : String
});


var Create = mongoose.model('Create', createSchema);

mongoose.connect('localhost');

var app = express();


// Middleware
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(session({
secret:'keyboard cat',
// connect-mongo session store
proxy: true,
resave: true,
saveUninitialized: true
}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(path.join(__dirname,'/public')));
app.use('/img',express.static(path.join(__dirname, 'public/images')));




app.get('/Account', function(req, res) {
res.render('Account', {
user: req.user
});
});

app.post('/Account', function(req,res,next){
var create = new Create({
cname: req.body.cname,
aname: req.body.aname,
ausername: req.body.ausername
});

create.save(function(err, doc){
if(err) res.json(err)
else res.redirect('/home');
});
});

// Server
app.listen(app.get('port'), function() {
console.log('Express server listening on port ' + app.get('port'));
});

module.exports = app;

account.jade 的格式不合适

最佳答案

由于您已将名称声明为架构中的唯一字段,因此您只能在数据库中保存唯一值。 cname 和 pusername 也是如此。

就您而言,当您第一次保存 Microsoft 时,它会保存文档。然而,当您下次尝试保存 MicroSoft 时,mongo 会抛出错误,因为数据库中已存在相同的值。

因此,作为解决方案,您应该删除唯一条件,或者只保存唯一值。

关于javascript - Nodejs 应用程序抛出 E11000 重复键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39289925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com