更新:感谢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
这是我们尝试运行的文件。当每个字段都是唯一的时它可以正常工作,但是当任何字段不唯一时它都不能正常工作,即使除了“uname”之外的所有字段都将“unique”字段设置为“false”
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 }
答案 0 :(得分:5)
Mongoose不会根据当前架构删除或重新定义以前创建的索引,所以我假设您之前在fname
上有一个唯一索引。手动将其放入shell中,然后重新启动应用程序:
db.students.dropIndex('fname_1')