【问题标题】:"ERROR:MongoServerError: E11000 duplicate key error collection: myFirstDatabase.files index: key_1 dup key: { key: null }"“错误:MongoServerError:E11000 重复键错误集合:myFirstDatabase.files 索引:key_1 重复键:{键:空}”
【发布时间】:2021-12-02 02:22:17
【问题描述】:

我正在尝试在我的 api 中集成创建用户的可能性。我正在使用节点和 mongodb。这是我的架构:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const FileSchema = new Schema({
    name: {
        type: String,
        required: true,
        minlength:1,
        unique:false,
    }, extension: {
        type:String,
        required:true,
        unique:false,
    }, content: {
        type:String,
        required:true,
        unique:false,
    },group:{
        type:String,
        required:false,
        unique:false,
    }, creator:{
        type: String,
        required: true,
        unique:false,
    }
})

const File = mongoose.model('File', FileSchema);

module.exports = File;

这是我的功能:

const createNewFile = (req, res) => {
    const name = req.body.name;
    const extension = req.body.extension;
    const creator = req.body.creator;
    const group = req.body.group;
    console.log(req.body)

    const newFile = new File({name, extension, content:'Write your code here',creator, group:group});

    newFile.save()
        .then(() => res.json('200'))
        .catch(err => res.status(400).json('ERROR:'+err))
}

Insomia 和 Postman 控制台返回标题中的错误。我能做些什么来避免这个错误?我添加了unique: false,因为我在另一个问题中阅读了它,但它还是失败了。有人可以帮帮我吗?当数据库为空时,我可以创建第一个元素。然后,当我创建第二个时,错误就来了。请帮帮我

【问题讨论】:

  • 看起来您在文件集合上有一个索引。你能在这里分享你所有的索引吗?如果您对文件模型进行了更改,则可能必须删除整个集合以摆脱旧索引
  • 你试过mongoosejs.com/docs/api.html#model_Model.syncIndexes方法删除未使用的索引吗?

标签: node.js mongodb mongoose


【解决方案1】:

在 mongodb 节点中,myFirstDatabase 数据库的 files 集合中的 {key: 1} 上有一个唯一索引。

我怀疑这是您在测试潜在架构设计时创建的。

为了插入不包含该字段唯一值的文档,包括不包括该字段,需要删除该索引。

实现这一目标的几种方法:

  • 使用 mongo shell 或 Compass 或 Robo3t 等管理工具连接到 mongod 并手动删除索引
  • 使用猫鼬提供的syncIndexes
  • 删除files 集合
  • 删除myFirstDatabase 数据库
  • 停止 mongod,删除整个 dbpath,然后从一个干净的实例重新开始

【讨论】:

    猜你喜欢
    • 2021-09-02
    • 2018-07-29
    • 2018-07-21
    • 2019-01-05
    • 2020-05-11
    • 1970-01-01
    • 2021-10-25
    • 2021-11-04
    • 2019-07-11
    相关资源
    最近更新 更多