【问题标题】:How do I change mongoose schema from unique true to unique false如何将猫鼬模式从唯一的 true 更改为唯一的 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);

【问题讨论】:

    标签: node.js mongoose mongoose-schema


    【解决方案1】:

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

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

    【讨论】:

    • 我可以通过转到 mongo atlas 中的索引选项卡进行收藏来解决它,然后删除电子邮件索引
    • 是的,如果您有权访问管理,这也可以:)
    猜你喜欢
    • 2021-09-12
    • 2015-03-11
    • 2014-05-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 2023-03-19
    • 2016-01-07
    • 2014-11-12
    相关资源
    最近更新 更多