如何使用 mongoose 从 mongodb 模式中删除索引?

Posted

技术标签:

【中文标题】如何使用 mongoose 从 mongodb 模式中删除索引?【英文标题】:How to drop index from mongodb schema using mongoose? 【发布时间】:2019-09-30 08:12:51 【问题描述】:

我正在尝试使用 mongoose 从 node.js 应用程序中的 mongoDB 集合中删除索引。我尝试使用model.collection.dropIndex("username"),但它给了我一个错误UnhandledPromiseRejectionWarning: MongoError: index not found with name [username]

这是我的架构

var mongoose = require("mongoose"),
  Schema = mongoose.Schema;

var userTable = new Schema(
  firstname:  type: String, required: true ,
  lastname:  type: String, required: true ,
  username:  type: String ,
  salt:  type: String ,
  passwordHash:  type: String ,
  email:  type: String, unique: true, required: true ,
  sessionToken:  type: String ,
  dateCreated:  type: String, default: new Date().toString() ,
  loginHistory: [String]
);

module.exports = mongoose.model("userTable", userTable);

当我从终端使用命令db.usertable.find() 在mongo shell 中执行查询时,我可以看到结果仍然有username 字段。从架构文件中删除 username 字段后,我也尝试过,但即使这样也无济于事。

提前致谢。

【问题讨论】:

【参考方案1】:

这会删除集合中除对象 id 之外的所有索引

db.collection.dropIndexs();

删除某个索引

首先输入命令

 db.collecction.getIndexes();

您会看到上面红色方块中的类似内容是索引名称。

db.collection.dropIndex(  "indexname": 1  )

【讨论】:

我不想从我的数据库中删除所有索引。我只想删除用户名。 非常感谢您更新您的答案。我运行了建议的命令并得到了结果> db.usertables.dropIndex("username": 1); "nIndexesWas" : 3, "ok" : 1 但我仍然可以看到我的数据库条目具有用户名字段。知道为什么会这样吗? 如果你想删除字段,只有索引会被删除,从猫鼬模型中删除它们 我运行了db.usertables.update(, $unset: username: 1 , multi: true );,现在用户名字段已从数据库模型中删除。谢谢。 很高兴为您提供帮助【参考方案2】:

使用唯一名称创建索引:

      db.collection('users')
      .createIndex(
         email: 1 ,
         unique: true,
          name: 'users.email.unique_index' , // here we set index name 
      );

然后使用它的名称删除索引:

 db.collection('users').dropIndex('users.email.unique_index');

【讨论】:

以上是关于如何使用 mongoose 从 mongodb 模式中删除索引?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongoose 从 mongodb 模式中删除索引?

如何使用 mongoose 从 mongoDB 中获取一定数量的对象? (Node.js)

如何从 1 分钟的嵌套数组数据中聚合 OHLC 5 分钟(mongodb、mongoose)

如何将 MongoDB 查询从 Node.js 驱动程序格式调整为 Mongoose 格式

如何使用 Mongoose 在 MongoDB 中插入 JSON 数组

使用 Mongoose 从 Decimal128 中提取十进制 - MongoDB