Node.js MongoError: E11000 重复键错误集合:

Posted

技术标签:

【中文标题】Node.js MongoError: E11000 重复键错误集合:【英文标题】:Node.js MongoError: E11000 duplicate key error collection: 【发布时间】:2021-09-19 16:10:17 【问题描述】:

我正在开发一个 djs 机器人,但我遇到了一个我不知道如何修复的错误 我看过https://docs.mongodb.com/manual/indexes/ 和NodeJs, Mocha and Mongoose 但是这里的信息似乎没有任何帮助-

错误发生在这里 -

const Data = await serverModel.findOne( serverID: message.guild.id );
    try
        console.log(`checking if a database exists for $message.guild`);
        console.log(Data);
        if(!Data) 
            console.log(`Data base doent exist for $message.guild`);
            console.log(`Creating a database for $message.guild`);
            const server = await serverModel.create(
                serverID: message.guild.id,
                calling: 'no',
                channel: null,
                talkingWith: null,
                stickyChannel: null,
                stickyMessage: null,
                stickyID: null,
            );
            console.log('shit');
            server.save();
            return;
        

    
    catch(err) 
        console.log(err);
    

这是我的 serverModel/serverSchema -

const mongoose = require('mongoose');

// ServerSchema
const ServerSchema = new mongoose.Schema(
    serverID:  type: String, require: true, unique: true, sparse:true ,
    calling:  type: String, require: true, unique: false, sparse:true ,
    channel:  type: String, require: true, unique: false, sparse:true ,
    talkingWith:  type: String, require: true, unique: false, sparse:true ,
    stickyChannel:  type: String, require: true, unique: false, sparse:true ,
    stickyMessage:  type: String, require: true, unique: false, sparse:true ,
    stickyID:  type: String, require: true, unique: false, sparse:true ,
);

const model = mongoose.model('ServerSchema', ServerSchema);

module.exports = model;

最后这是我得到的错误 -

checking if a database exists for Vixo
null
Data base doent exist for Vixo
Creating a database for Vixo  
MongoError: E11000 duplicate key error collection: database.serverschemas index: stickyChannel_1 dup key:  stickyChannel: null 

【问题讨论】:

我会做@Dinesh Ty 我爱你,谢谢你 @Karlis Kazaks 如果我的回答有用,请点赞。 【参考方案1】:

似乎已经有 'stickyChannel' 参数为空值的记录。那么您能否尝试通过简单地为每个参数分配值来创建新记录?

尝试以下代码来创建新记录:

`const server = await serverModel.create(
  serverID: message.guild.id, 
   calling: 'no', 
   channel: 'test', 
   talkingWith: 'test', 
   stickyChannel: 'test, 
   stickyMessage: 'test, 
   stickyID: 'test', 
);`

【讨论】:

以上是关于Node.js MongoError: E11000 重复键错误集合:的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mongoose 在 Node JS 中进行全文搜索

MongoError:没有可用的主服务器

开玩笑单元测试返回“MongoError:拓扑被破坏”

MongoError:拓扑被破坏,我该如何修复它? [复制]

MongoError:此 MongoDB 部署不支持可重试写入。请将 retryWrites=false 添加到您的连接字符串

MongoError:此 MongoDB 部署不支持可重试写入。请将 retryWrites=false 添加到您的连接字符串