如何将猫鼬模式从唯一的 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的主要内容,如果未能解决你的问题,请参考以下文章