本文将会介绍 MongoDB 删除索引的 dropIndex() 方法。
dropIndex() 方法
集合的 dropIndex() 方法可以用于删除索引,语法如下:
db.collection.dropIndex(index)
其中,index 代表了想要删除的索引,它可以是一个指定索引名称的字符串,也可以是描述索引定义的文档。
注意,_id 字段上的默认索引无法被删除。
dropIndex() 示例
示例一:删除单个索引
首先,使用以下命令基于 movies 集合中的“Release Date”字段创建一个索引:
db.movies.createIndex({
'Release Date': 1})
'Release Date_1'
以上语句创建了一个名为“”的索引。
其次,利用 getIndexes() 方法查看 movies 集合中的全部索引:
db.movies.getIndexes()
[
{
v: 2, key: {
_id: 1 }, name: '_id_' },
{
v: 2, key: {
Title: 1 }, name: 'Title_1' }
{
v: 2, key: {
'Release Date': 1 }, name: 'Release Date_1' }
]
接下来,使用 dropIndex() 删除索引“Release Date_1”:
db.movies.dropIndex('Release Date_1')
{
nIndexesWas: 3, ok: 1 }
返回结果显示已经删除了一个索引。
最后,再次使用 getIndexes() 方法查看索引:
db.movies.getIndexes()
[
{
v: 2, key: {
_id: 1 }, name: '_id_' },
{
v: 2, key: {
Title: 1 }, name: 'Release Date_1' }
]
示例二:基于定义删除索引
首先,重新创建基于“Release Date”字段的索引:
db.movies.createIndex({
'Release Date': 1})
'Release Date_1'
查看 movies 集合上的索引:
db.movies.getIndexes()
[
{
v: 2, key: {
_id: 1 }, name: '_id_' },
{
v: 2, key: {
Title: 1 }, name: 'Title_1' }
{
v: 2, key: {
'Release Date': 1 }, name: 'Release Date_1' }
]
然后,基于索引“Release Date_1”的定义删除该索引:
db.movies.dropIndex({
'Release Date': 1});
{
nIndexesWas: 3, ok: 1 }
示例三:删除所有非主键索引
从 MongoDB 4.2 开始,无法使用集合的 dropIndex(‘*’) 删除所有非主键(_id)索引,而是需要使用 dropIndexes() 方法:
db.collection.dropIndexes()
首先,重新创建基于“Release Date”字段的索引:
db.movies.createIndex({
'Release Date': 1})
'Release Date_1'
查看 movies 集合上的索引:
db.movies.getIndexes()
[
{
v: 2, key: {
_id: 1 }, name: '_id_' },
{
v: 2, key: {
Title: 1 }, name: 'Title_1' }
{
v: 2, key: {
'Release Date': 1 }, name: 'Release Date_1' }
]
最后,使用 dropIndexes() 方法删除 _id 之外的其他索引:
db.movies.dropIndexes()
{
nIndexesWas: 3,
msg: 'non-_id indexes dropped for collection',
ok: 1
}