OPTIONS

Config Database

The config database supports sharded cluster operation. See the Sharding section of this manual for full documentation of sharded clusters.

Important

Consider the schema of the config database internal and may change between releases of MongoDB. The config database is not a dependable API, and users should not write data to the config database in the course of normal operation or maintenance.

Warning

Modification of the config database on a functioning system may lead to instability or inconsistent data sets. If you must modify the config database, use mongodump to create a full backup of the config database.

To access the config database, connect to a mongos instance in a sharded cluster, and use the following helper:

use config

You can return a list of the collections, with the following helper:

show collections

Collections

config
config.changelog

The changelog collection stores a document for each change to the metadata of a sharded collection.

Example

The following example displays a single record of a chunk split from a changelog collection:

{
 "_id" : "<hostname>-<timestamp>-<increment>",
 "server" : "<hostname><:port>",
 "clientAddr" : "127.0.0.1:63381",
 "time" : ISODate("2012-12-11T14:09:21.039Z"),
 "what" : "split",
 "ns" : "<database>.<collection>",
 "details" : {
    "before" : {
       "min" : {
          "<database>" : { $minKey : 1 }
       },
       "max" : {
          "<database>" : { $maxKey : 1 }
       },
       "lastmod" : Timestamp(1000, 0),
       "lastmodEpoch" : ObjectId("000000000000000000000000")
    },
    "left" : {
       "min" : {
          "<database>" : { $minKey : 1 }
       },
       "max" : {
          "<database>" : "<value>"
       },
       "lastmod" : Timestamp(1000, 1),
       "lastmodEpoch" : ObjectId(<...>)
    },
    "right" : {
       "min" : {
          "<database>" : "<value>"
       },
       "max" : {
          "<database>" : { $maxKey : 1 }
       },
       "lastmod" : Timestamp(1000, 2),
       "lastmodEpoch" : ObjectId("<...>")
    }
 }
}

Each document in the changelog collection contains the following fields:

config.changelog._id

The value of changelog._id is: <hostname>-<timestamp>-<increment>.

config.changelog.server

The hostname of the server that holds this data.

config.changelog.clientAddr

A string that holds the address of the client, a mongos instance that initiates this change.

config.changelog.time

A ISODate timestamp that reflects when the change occurred.

config.changelog.what

Reflects the type of change recorded. Possible values are:

  • dropCollection
  • dropCollection.start
  • dropDatabase
  • dropDatabase.start
  • moveChunk.start
  • moveChunk.commit
  • split
  • multi-split
config.changelog.ns

Namespace where the change occurred.

config.changelog.details

A document that contains additional details regarding the change. The structure of the details document depends on the type of change.

config.chunks

The chunks collection stores a document for each chunk in the cluster. Consider the following example of a document for a chunk named records.pets-animal_\"cat\":

{
   "_id" : "mydb.foo-a_\"cat\"",
   "lastmod" : Timestamp(1000, 3),
   "lastmodEpoch" : ObjectId("5078407bd58b175c5c225fdc"),
   "ns" : "mydb.foo",
   "min" : {
         "animal" : "cat"
   },
   "max" : {
         "animal" : "dog"
   },
   "shard" : "shard0004"
}

These documents store the range of values for the shard key that describe the chunk in the min and max fields. Additionally the shard field identifies the shard in the cluster that “owns” the chunk.

config.collections

The collections collection stores a document for each sharded collection in the cluster. Given a collection named pets in the records database, a document in the collections collection would resemble the following:

{
   "_id" : "records.pets",
   "lastmod" : ISODate("1970-01-16T15:00:58.107Z"),
   "dropped" : false,
   "key" : {
         "a" : 1
   },
   "unique" : false,
   "lastmodEpoch" : ObjectId("5078407bd58b175c5c225fdc")
}
config.databases

The databases collection stores a document for each database in the cluster, and tracks if the database has sharding enabled. databases represents each database in a distinct document. When a databases have sharding enabled, the primary field holds the name of the primary shard.

{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "mydb", "partitioned" : true, "primary" : "shard0000" }
config.lockpings

The lockpings collection keeps track of the active components in the sharded cluster. Given a cluster with a mongos running on example.com:30000, the document in the lockpings collection would resemble:

{ "_id" : "example.com:30000:1350047994:16807", "ping" : ISODate("2012-10-12T18:32:54.892Z") }
config.locks

The locks collection stores a distributed lock. This ensures that only one mongos instance can perform administrative tasks on the cluster at once. The mongos acting as balancer takes a lock by inserting a document resembling the following into the locks collection.

{
    "_id" : "balancer",
    "process" : "example.net:40000:1350402818:16807",
    "state" : 2,
    "ts" : ObjectId("507daeedf40e1879df62e5f3"),
    "when" : ISODate("2012-10-16T19:01:01.593Z"),
    "who" : "example.net:40000:1350402818:16807:Balancer:282475249",
    "why" : "doing balance round"
}

If a mongos holds the balancer lock, the state field has a value of 2, which means that balancer is active. The when field indicates when the balancer began the current operation.

Changed in version 2.0: The value of the state field was 1 before MongoDB 2.0.

config.mongos

The mongos collection stores a document for each mongos instance affiliated with the cluster. mongos instances send pings to all members of the cluster every 30 seconds so the cluster can verify that the mongos is active. The ping field shows the time of the last ping, while the up field reports the uptime of the mongos as of the last ping. The cluster maintains this collection for reporting purposes.

The following document shows the status of the mongos running on example.com:30000.

{ "_id" : "example.com:30000", "ping" : ISODate("2012-10-12T17:08:13.538Z"), "up" : 13699, "waiting" : true }
config.settings

The settings collection holds the following sharding configuration settings:

The following is an example settings collection:

{ "_id" : "chunksize", "value" : 64 }
{ "_id" : "balancer", "stopped" : false }
config.shards

The shards collection represents each shard in the cluster in a separate document. If the shard is a replica set, the host field displays the name of the replica set, then a slash, then the hostname, as in the following example:

{ "_id" : "shard0000", "host" : "shard1/localhost:30000" }

If the shard has tags assigned, this document has a tags field, that holds an array of the tags, as in the following example:

{ "_id" : "shard0001", "host" : "localhost:30001", "tags": [ "NYC" ] }
config.tags

The tags collection holds documents for each tagged shard key range in the cluster. The documents in the tags collection resemble the following:

{
    "_id" : { "ns" : "records.users", "min" : { "zipcode" : "10001" } },
    "ns" : "records.users",
    "min" : { "zipcode" : "10001" },
    "max" : { "zipcode" : "10281" },
    "tag" : "NYC"
}
config.version

The version collection holds the current metadata version number. This collection contains only one document:

To access the version collection you must use the db.getCollection() method. For example, to display the collection’s document:

mongos> db.getCollection("version").find()
{ "_id" : 1, "version" : 3 }

Note

Like all databases in MongoDB, the config database contains a system.indexes collection contains metadata for all indexes in the database for information on indexes, see Indexes.