注册

详解MongoDB的get_indexes_with_info()函数:获取指定集合的所有索引信息

MongoDB get_indexes_with_info()函数详解

函数作用

get_indexes_with_info()函数用于获取集合中索引的信息,比如索引的名称、类型,索引键、是否为唯一索引等。

使用方法

通过db.collection.getIndexes()可以获取到当前集合中的所有索引信息,但是该函数返回的结果不够详细。如果需要获取更详细的索引信息,则可以使用get_indexes_with_info()函数.

get_indexes_with_info()函数基本语法如下:

db.collection.getIndexes({options})

其中,options为可选参数,包含以下字段:

字段名 描述
full 默认值为false。设置为true,则返回包含更多细节信息的索引信息

使用实例

实例一:

首先在test数据库中创建一个名为users的集合:

use test
db.createCollection("users")

然后往该集合中插入一些文档:

db.users.insertMany([
   {name: "Tom", age: 18, gender: "M"},
   {name: "Lucy", age: 20, gender: "F", interest: "dance"},
   {name: "Lily", age: 22, gender: "F", interest: "hiking"},
   {name: "Jim", age: 25, gender: "M", interest: "reading"}
])

在该集合上创建一些索引:

db.users.createIndex({name: 1})  // 以name属性创建一个升序索引
db.users.createIndex({age: -1})  // 以age属性创建一个降序索引

执行如下命令获取该集合中的索引信息:

db.users.getIndexesWithInfo({full: true})

返回结果如下:

[
   {
      "v" : 2,
      "key" : {
         "_id" : 1
      },
      "name" : "_id_",
      "ns" : "test.users"
   },
   {
      "v" : 2,
      "unique" : false,
      "key" : {
         "name" : 1
      },
      "name" : "name_1",
      "ns" : "test.users"
   },
   {
      "v" : 2,
      "key" : {
         "age" : -1
      },
      "name" : "age_-1",
      "ns" : "test.users"
   }
]

可以看到返回的结果中包含了索引名称、类型、索引键、是否为唯一索引等详细信息。

实例二:

在test数据库中创建一个名为students的集合,并往该集合中插入一些文档:

use test
db.createCollection("students")
db.students.insertMany([
   {name: "John", age: 18, gender: "M", address: {country: "US", city: "New York"}},
   {name: "Mike", age: 19, gender: "M", address: {country: "US", city: "Los Angeles"}},
   {name: "Lucy", age: 22, gender: "F", address: {country: "UK", city: "London"}},
   {name: "Lily", age: 25, gender: "F", address: {country: "China", city: "Beijing"}}
])

对该集合中的address属性创建复合索引:

db.students.createIndex({"address.country": 1, "address.city": 1})

执行如下命令获取该集合中的复合索引信息:

db.students.getIndexesWithInfo({full: true})

返回结果如下:

[
   {
      "v" : 2,
      "key" : {
         "_id" : 1
      },
      "name" : "_id_",
      "ns" : "test.students"
   },
   {
      "v" : 2,
      "unique" : false,
      "key" : {
         "address.country" : 1,
         "address.city" : 1
      },
      "name" : "address.country_1_address.city_1",
      "ns" : "test.students"
   }
]

可以看到复合索引的名称为:“address.country_1_address.city_1”,其key为{"address.country": 1, "address.city": 1}。