Mongo给唯一:false的字段提供dup关键错误

更新 :感谢JohnnyHK的回答,我的问题已经解决了!

初始问题 :任何想法,为什么我得到以下错误信息? 请注意,即使在程序正常运行时,“我们已连接”行之前的所有内容都会打印出来。

DEBUG=cfcwebportal:* ./bin/www [Error: /home/ben/Code For Chicago/cfcwebportal/node_modules /mongoose/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/node_modules/bson-ext/build/Release/bson.node: invalid ELF header] js-bson: Failed to load c++ bson extension, using pure JS version [Error: /home/ben/Code For Chicago/cfcwebportal/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/node_modules/bson-ext/build/Release/bson.node: invalid ELF header] js-bson: Failed to load c++ bson extension, using pure JS version [Error: /home/ben/Code For Chicago/cfcwebportal/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/node_modules/bson-ext/build/Release/bson.node: invalid ELF header] js-bson: Failed to load c++ bson extension, using pure JS version [Error: /home/ben/Code For Chicago/cfcwebportal/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/node_modules/bson-ext/build/Release/bson.node: invalid ELF header] js-bson: Failed to load c++ bson extension, using pure JS version We are connected meBob { [MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: cfc.students.$fname_1 dup key: { : "meBob" }] name: 'MongoError', message: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: cfc.students.$fname_1 dup key: { : "meBob" }', index: 0, code: 11000, errmsg: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: cfc.students.$fname_1 dup key: { : "meBob" }' } We found students 

这是我们正在尝试运行的文件。 当每个字段是唯一的,但是当任何字段不是唯一的时,即使“唯一”字段对于所有字段都被设置为“假”,但是“非名字”

 var express = require('express'); var router = express.Router(); var jsSHA = require("jssha"); // see https://github.com/Caligatio/jsSHA //Checking if mongoose is npm installed //Requires nmp install mongodb as well var mongoose = require('mongoose'); //Using database "cfc"; if not creted will create for first time mongoose.connect('mongodb://localhost/cfc') var db = mongoose.connection; function validatePresenceOf (value) { if(typeof value === 'string' || typeof value === 'number') { value = value.toString().trim(); } return !!(value && value.length); } //In case not connected db.on('error', console.error.bind(console, 'connection error: ')); db.once('open', function(callback) { //All prints are for debugging //Furthermore, we do not know what needs to be inside of db.once and what could be outside of db.once. console.log("We are connected"); //Creating Schema var studentSchema = mongoose.Schema({ uname: { type: String , required: true , unique: true , validate: [validatePresenceOf, 'Username is empty'] }, password: { type: String , required: true , unique: false , validate: [validatePresenceOf, 'Password is empty'] }, fname: { type: String , required: true , unique: false , validate: [validatePresenceOf, 'First name is empty'] }, lname: { type: String , required: true , unique: false , validate: [validatePresenceOf, 'Last name is empty'] }, organization: { type: String , required: true , unique: false , validate: [validatePresenceOf, 'Organization is empty'] } }); //Using the schema Student to create model var Student = mongoose.model('Student', studentSchema); // Creating the student Bob var bob = new Student({ uname: 'Sir Bob', password: 'mypass', fname: 'meBob', lname: 's', organization: 'moredeath' }); console.log(bob.fname); //Saving the Student Bob bob.save(function (err, bob) { if (err) return console.log(err); console.log("We saved BOB"); }); //Finding all students var k = Student.find(function (err, students){ if (err) return console.log("We did not find anything"); console.log("We found students"); }); //console.log(k); }); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); module.exports = router; 

这是我的当前分贝:

 > db.students.find() { "_id" : ObjectId("55637c8f00a648751180f0b1"), "uname" : "UBob", "password" : "AyBob", "fname" : "Bob", "lname" : "Robertson", "organization" : "CFC", "__v" : 0 } { "_id" : ObjectId("5563847fadcdb986135440e0"), "uname" : "death", "password" : "death", "fname" : "death", "lname" : "death", "organization" : "death", "__v" : 0 } { "_id" : ObjectId("556386ab95a85003141b4733"), "uname" : "Ben", "password" : "mypass", "fname" : "meBob", "lname" : "s", "organization" : "moredeath", "__v" : 0 } 

Mongoose不会删除或重新定义基于当前模式的以前创build的索引,所以我假设你以前在fname上有一个唯一的索引。 手动将其放在shell中,然后重新启动您的应用程序:

 db.students.dropIndex('fname_1')