最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

无法弄清楚如何摆脱MongoDB中的这个重复键错误

运维笔记admin17浏览0评论

无法弄清楚如何摆脱MongoDB中的这个重复键错误

无法弄清楚如何摆脱MongoDB中的这个重复键错误

我一直坚持这个错误几个小时,我无法弄清楚导致重复键错误的原因。

重复的密钥为null,我不知道这是指什么。这是错误:

{ MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: my_db.schools.$username_1  dup key: { : null }

我有一个学校模式:

var mongoose = require('mongoose');
var passportLocalMongoose = require('passport-local-mongoose');

var schoolSchema = new mongoose.Schema({
    name: String,
    location: String,
    author: {
        id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
        },
        username: String
    },
    code: Number,
    members: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
        }
    ],
    cluborgs: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "Cluborg"
        }
    ],
    date_joined: {type: Date, default: Date.now}
});

schoolSchema.plugin(passportLocalMongoose);

module.exports = mongoose.model("School", schoolSchema);
回答如下:

从Mongoose属性中删除unique: true不会自动从MongoDB中删除索引。

此外,如果从Mongoose模式中完全删除属性,它也不会自动从MongoDB中删除相关索引。

所以看起来在你的情况下,MongoDB仍然期望你从模式中删除一个唯一的School.username值,因此默认为每个文档的空值 - 触发唯一约束。

我个人使用MongoDB CLI来删除这些索引,如果它发生的话,虽然我怀疑在该属性上设置unique: false也会起作用。

发布评论

评论列表(0)

  1. 暂无评论