Timmy
Timmy

Reputation: 12828

A list of indices in MongoDB?

Is there a way to see a list of indices on a collection in mongodb in shell? i read through http://www.mongodb.org/display/DOCS/Indexes but i dont see anything

Upvotes: 108

Views: 39627

Answers (7)

Somnath Muluk
Somnath Muluk

Reputation: 57656

If you want to list all indexes across collections:

db.getCollectionNames().forEach(function(collection) {
   indexes = db.getCollection(collection).getIndexes();
   print("Indexes for " + collection + ":");
   printjson(indexes);
});

Upvotes: 39

Julesezaar
Julesezaar

Reputation: 3396

Using an old version of MongoDB here but one of the top answers in this question here did not work for me. This one worked:

db.getCollectionNames().forEach(function(collection) {
    print("Collection: '" + collection);
    print(db.getCollection(collection).getIndexes())
});

Upvotes: 0

DCaugs
DCaugs

Reputation: 494

Taking this one step further, if you'd like to find all indexes on all collections, this script (modified from Juan Carlos Farah's script here) gives you some useful output, including a JSON printout of the index details:

 // Switch to admin database and get list of databases.
db = db.getSiblingDB("admin");
dbs = db.runCommand({ "listDatabases": 1}).databases;


// Iterate through each database and get its collections.
dbs.forEach(function(database) {
db = db.getSiblingDB(database.name);
cols = db.getCollectionNames();

// Iterate through each collection.
cols.forEach(function(col) {

    //Find all indexes for each collection
     indexes = db[col].getIndexes();

     indexes.forEach(function(idx) {
        print("Database:" + database.name + " | Collection:" +col+ " | Index:" + idx.name);
        printjson(indexes);
         });


    });

});

Upvotes: 4

Kamilski81
Kamilski81

Reputation: 15117

Make sure you use your collection:

db.collection.getIndexes()

http://docs.mongodb.org/manual/administration/indexes/#information-about-indexes

Upvotes: 11

Salvador Dali
Salvador Dali

Reputation: 222581

You can also output all your indexes together with their size:

db.collectionName.stats().indexSizes

Also check that db.collectionName.stats() gives you a lot of interesting information like paddingFactor, size of the collection and number of elements inside of it.

Upvotes: 6

Marian Zagoruiko
Marian Zagoruiko

Reputation: 1596

And if you want to get list of all indexes in your database:

use "yourdbname"

db.system.indexes.find()

Upvotes: 13

mdirolf
mdirolf

Reputation: 7651

From the shell:

db.test.getIndexes()

For shell help you should try:

help;
db.help();
db.test.help();

Upvotes: 149

Related Questions