Definition
listCollectionsRetrieves information, including the names and creation options, for the collections and views in a database.
The
listCollectionscommand returns a document that contains an unsorted list of all collections and views in the database. You can use the returned document to create a cursor on the collection.mongoshprovides thedb.getCollectionInfos()and thedb.getCollectionNames()helper methods, as well as the show collections command.
Compatibility
This command is available in deployments hosted in the following environments:
- MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
Note
This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.
- MongoDB Enterprise: The subscription-based, self-managed version of MongoDB
- MongoDB Community: The source-available, free-to-use, and self-managed version of MongoDB
Syntax
The command has the following syntax:
db.runCommand(
{
listCollections: 1,
filter: <document>,
nameOnly: <boolean>,
authorizedCollections: <boolean>,
comment: <any>
}
)Command Fields
The command can take the following optional fields:
| Field | Type | Description |
|---|---|---|
| document | Optional. A query predicate to filter the list of collections. You can specify a query predicate on any of the fields returned by |
| boolean | Optional. A flag to indicate whether the command returns just the name and type ( The default value is When |
| boolean | Optional. A flag, when set to When both The default value is For a user who has When used without |
| any | Optional. A user-provided comment to attach to this command. Once set, this comment appears alongside records of this command in the following locations:
A comment can be any valid BSON type (string, integer, object, array, etc). Any comment set on a |
Behavior
Filter
Use a filter to limit the results of listCollections. You can specify a filter on any of the fields returned in the listCollections result set.
Locks
listCollections lock behavior:
- Earlier than MongoDB 5.0,
listCollectionstakes an intent shared lock lock on each collection in the database whenlistCollectionsholds an intent shared lock on the database. - Starting in MongoDB 5.0,
listCollectionsdoesn't take an intent shared lock on a collection or database.listCollectionsisn't blocked by operations holding an exclusive write lock on a collection.
To learn about locks, see FAQ: Concurrency.
Client Disconnection
If the client that issued listCollections disconnects before the operation completes, MongoDB marks listCollections for termination using killOp.
Replica Set Member State Restriction
To run on a replica set member, listCollections operations require the member to be in PRIMARY or SECONDARY state. If the member is in another state, such as STARTUP2, the operation errors.
Required Access
The listCollections command and its wrapper db.getCollectionInfos() require the listCollections action when access control is enforced. Users must have privileges that grant the listCollections action on the database to run listCollections.
For example, the following command grants the privilege to run db.getCollectionInfos() against the test database:
{ resource: { db: "test", collection: "" }, actions: [ "listCollections" ] }The built-in role read provides the privilege to run listCollections for a specific database.
Users without the required read privilege can run listCollections when authorizedCollections and nameOnly
are both set to true. In this case, the command returns the names and types for collection(s) where the user has privileges.
For example, consider a user with a role that grants the following find privilege:
{ resource: { db: "sales", collection: "currentQuarter" }, actions: [ "find" ] }The user can run listCollections if authorizedCollections
and nameOnly are both set to true.
db.runCommand(
{
listCollections: 1.0,
authorizedCollections: true,
nameOnly: true
}
)The operation returns the name and type of the currentQuarter
collection.
However, the following operations return an error if the user does not have the required access authorization:
db.runCommand(
{
listCollections: 1.0,
authorizedCollections: true
}
)
db.runCommand(
{
listCollections: 1.0,
nameOnly: true
}
)Output
listCollections.cursorA document that contains information needed to create a cursor to documents that contain collection names and options. The cursor information includes the cursor id, the full namespace for the command, and the first batch of results. Each document in the batch output contains the following fields:
Field Type Description name
String
Name of the collection.
type
String
Type of data store. Returns
collectionfor collections,viewfor views, andtimeseriesfor time series collection.options
Document
Collection options.
These options correspond directly to the options available in
db.createCollection(). For the descriptions on the options, seedb.createCollection().info
Document
Lists the following fields related to the collection:
- readOnly
boolean. Iftruethe data store is read only.- uuid
- UUID. Once established, the collection UUID does not change. The collection UUID remains the same across replica set members and shards in a sharded cluster.
idIndex
Document
Provides information on the
_idindex for the collection.
listCollections.okThe return value for the command. A value of
1indicates success.
If you don't require a raw command response, use the db.getCollectionInfos() or the db.getCollectionNames() helper methods.
Example
List All Collections
The music database contains three collections, motorhead, taylorSwift, and ramones.
To get a list of collection names, run the listCollections command with the nameOnly option.
db.runCommand(
{
listCollections: 1.0,
nameOnly: true
}
)The output is:
{
cursor: {
id: Long("0"),
ns: 'music.$cmd.listCollections',
firstBatch: [
{ name: 'motorhead', type: 'collection' },
{ name: 'taylorSwift', type: 'collection' },
{ name: 'ramones', type: 'collection' }
]
},
ok: 1
}To get more detailed information, remove the nameOnly option.
db.runCommand(
{
listCollections: 1.0
}
)The output is:
{
cursor: {
id: Long("0"),
ns: 'music.$cmd.listCollections',
firstBatch: [
{
name: 'motorhead',
type: 'collection',
options: {},
info: {
readOnly: false,
uuid: new UUID("09ef1858-2831-47d2-a3a7-9a29a9cfeb94")
},
idIndex: { v: 2, key: { _id: 1 }, name: '_id_' }
},
{
name: 'taylorSwift',
type: 'collection',
options: {},
info: {
readOnly: false,
uuid: new UUID("6c46c8b9-4999-4213-bcef-9a36b0cff228")
},
idIndex: { v: 2, key: { _id: 1 }, name: '_id_' }
},
{
name: 'ramones',
type: 'collection',
options: {},
info: {
readOnly: false,
uuid: new UUID("7e1925ba-f2f9-4e42-90e4-8cafd434a6c4")
},
idIndex: { v: 2, key: { _id: 1 }, name: '_id_' }
}
]
},
ok: 1
}Learn More
For collection options:
For collection information: