如何将猫鼬模式从唯一的 true 更改为唯一的 false

Posted

技术标签:

【中文标题】如何将猫鼬模式从唯一的 true 更改为唯一的 false【英文标题】:How do I change mongoose schema from unique true to unique false 【发布时间】:2021-02-11 00:31:47 【问题描述】:

在下面的代码中,注释的电子邮件模式是以前的,我不再希望电子邮件是必需的,并且是唯一的,它应该是可选的。

我收到一个错误,说重复,null "E11000 重复键错误集合:mydb.lists index: email_1 dup key: (email: null)"

const mongoose = require("mongoose");    
const  Schema  = mongoose;

const alliedSchema = new Schema(
  
    name: String,
    phone: String,
    email: 
        unique: false,
        type: String
    ,
    // email:
    // type: String,
    // unique: true,
    // required: true,
    // lowercase: true,
    // validate(value)
    //     if(!validator.isEmail(value))
    //         throw new Error('Email is invalid')
    //     
    // 
    // ,
    picture: 
      type: String,
      default: "https://www.dialadocdirect.org/app/storage/images/noimage.jpg",
    ,
    location: String,
    type: String,
    verified: 
      type: Boolean,
      default: false,
    ,
  ,
  
    timestamps: true,
  
);


module.exports = mongoose.model("allied", alliedSchema);

【问题讨论】:

【参考方案1】:

索引不会自动删除,因此,即使您注释掉架构,您的索引也会保留。至少有两种可能的解决方案:

    如果您有权访问 Mongo 数据库,则可以执行db.getCollection('allied').dropIndexes() 并重新启动应用程序。 Mongoose 将自动创建集合中不存在的新索引(在这种情况下,它将重新创建所有索引,但唯一的)。 如果您无权访问数据库,您也可以执行以下操作:await alliedModel.syncIndexes();(实际上取决于您如何创建新模型,但 alliedModel 应该是与 alliedSchema 关联的模型) .这将根据 Mongoose Schema 简单地同步所有索引,并且只会删除 unique 属性,但保持所有其他索引不变。

【讨论】:

我可以通过转到 mongo atlas 中的索引选项卡进行收藏来解决它,然后删除电子邮件索引 是的,如果您有权访问管理,这也可以:)

以上是关于如何将猫鼬模式从唯一的 true 更改为唯一的 false的主要内容,如果未能解决你的问题,请参考以下文章

模式实例化后如何使猫鼬模式属性唯一(已包含数据)

无法将猫鼬虚拟与打字稿一起使用

无法将猫鼬虚拟与打字稿一起使用

如何将猫鼬连接方法分离到另一个JS文件?

MongoDB 排序顺序和唯一字段

通过 mongoose 模式将数据存储在 mongodb 中,不传递唯一真键的值