【问题标题】:Mongo giving dup key error for fields with unique: falseMongo 为具有唯一性的字段提供 dup 键错误:false
【发布时间】:2015-08-07 09:06:15
【问题描述】:

更新:感谢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

这是我们试图运行的文件。当每个字段都是唯一的时它可以正常工作,但当任何字段不唯一时它就不能正常工作,即使“唯一”字段设置为“false”,但“uname”除外

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 }

【问题讨论】:

  • 哎呀,感谢您向我展示了绳索:)

标签: javascript node.js mongodb mean-stack


【解决方案1】:

Mongoose 不会根据当前架构删除或重新定义先前创建的索引,因此我假设您之前在 fname 上拥有唯一索引。手动将其放入 shell 中,然后重新启动您的应用程序:

db.students.dropIndex('fname_1')

【讨论】:

  • 你是个该死的英雄我的朋友。
猜你喜欢
  • 2017-02-03
  • 2015-04-30
  • 2013-06-11
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多