Definition
listCollectionsRetrieves information, including the names and creation options, for the collections and views in a database.
The
listCollectionscommand returns a document that contains information you can use to create a cursor on the collection.mongoprovides thedb.getCollectionInfos()and thedb.getCollectionNames()helper methods.The command has the following form:
{ listCollections: 1, filter: <document>, nameOnly: <boolean>, authorizedCollections: <boolean>, comment: <any> } The command can take the following optional fields:
FieldTypeDescriptionfilterdocument
Optional. A query expression to filter the list of collections.
You can specify a query expression on any of the fields returned by
listCollections.nameOnlyboolean
Optional. A flag to indicate whether the command should return just the collection/view names and type or return both the name and other information.
Returning just the name and type (
vieworcollection) does not take collection-level locks whereas returning full collection information locks each collection in the database.The default value is
false.Note
When
nameOnlyistrue, yourfilterexpression can only filter based on a collection's name and type. No other fields are available.authorizedCollectionsboolean
Optional. A flag, when set to
trueand used withnameOnly: true, that allows a user without the required privilege (i.e.listCollectionsaction on the database) to run the command when access control is enforced.When both
authorizedCollectionsandnameOnlyoptions are set to true, the command returns only those collections for which the user has privileges. For example, if a user hasfindaction on specific collections, the command returns only those collections; or, if a user hasfindor any other action, on the database resource, the command lists all collections in the database.The default value is
false. That is, the user must havelistCollectionsaction on the database to run the command.For a user who has
listCollectionsaction on the database, this option has no effect since the user has privileges to list the collections in the database.When used without
nameOnly: true, this option has no effect. That is, the user must have the required privileges to run the command when access control is enforced. Otherwise, the user is unauthorized to run the command.commentany
Optional. A user-provided comment to attach to this command. Once set, this comment appears alongside records of this command in the following locations:
mongod log messages, in the
attr.command.cursor.commentfield.Database profiler output, in the
command.commentfield.currentOpoutput, in thecommand.commentfield.
A comment can be any valid BSON type (string, integer, object, array, etc).
New in version 4.4.
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 takes an intent shared lock
lock on each collection in the database when listCollections holds
an intent shared lock on the database.
To learn about locks, see What type of locking does MongoDB use?.
Client Disconnection
Starting in MongoDB 4.2, if the client that issued listCollections
disconnects before the operation completes, MongoDB marks listCollections
for termination using killOp.
Replica Set Member State Restriction
Starting in MongoDB 4.4, 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.
In previous versions, the operations also run when the member
is in STARTUP2. The operations wait until the member
transitioned to RECOVERING.
Required Access
The listCollections command requires 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 } )
show collections
The mongosh method show collections is similar to:
db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
For users with the required access,
show collectionslists the non-system collections for the database.For users without the required access,
show collectionslists only the collections for which the users has privileges.
Output
listCollections.cursorA document that contains information with which 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, as well as the first batch of results. Each document in the batch output contains the following fields:
FieldTypeDescriptionname
String
Name of the collection.
type
String
Type of data store. Returns
collectionfor collections andviewfor views.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.
New in version 3.6.
idIndex
Document
Provides information on the
_idindex for the collection.
Example
List All Collections
The music database contains three collections, motorhead,
taylorSwift, and ramones.
To list the collections in the database, you can use the built-in
mongo command, show collections.
show collections
The output is:
motorhead ramones taylorSwift
To get a similar list with the listCollections collections command,
use the nameOnly option.
db.runCommand( { listCollections: 1.0, nameOnly: true } )
The output is:
{ "cursor" : { "id" : NumberLong(0), "ns" : "records.$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" : NumberLong(0), "ns" : "records.$cmd.listCollections", "firstBatch" : [ { "name" : "motorhead", "type" : "collection", "options" : {}, "info" : { "readOnly" : false, "uuid" : UUID("09ef1858-2831-47d2-a3a7-9a29a9cfeb94") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }, { "name" : "taylorSwift", "type" : "collection", "options" : {}, "info" : { "readOnly" : false, "uuid" : UUID("6c46c8b9-4999-4213-bcef-9a36b0cff228") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }, { "name" : "ramones", "type" : "collection", "options" : {}, "info" : { "readOnly" : false, "uuid" : UUID("7e1925ba-f2f9-4e42-90e4-8cafd434a6c4") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } } ] }, "ok" : 1 }
Learn More
For collection options:
For collection information: