Docs 菜单

listCollections

listCollections

Retrieves information, including the names and creation options, for the collections and views in a database.

The listCollections command 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.

mongosh provides the db.getCollectionInfos() and the db.getCollectionNames() helper methods.

此命令可用于以下环境中托管的部署:

注意

所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令

该命令具有以下语法:

db.runCommand(
{
listCollections: 1,
filter: <document>,
nameOnly: <boolean>,
authorizedCollections: <boolean>,
comment: <any>
}
)

该命令可以采用以下可选字段:

字段
类型
说明

filter

文档

可选。用于过滤集合列表的查询谓词。

您可以在 listCollections返回的任何字段上指定查询谓词。

nameOnly

布尔

可选。 指示命令是应仅返回名称和类型( viewcollectiontimeseries )还是同时返回名称和其他信息的标志。

默认值为 false

nameOnlytrue 时,filter 表达式只能根据集合的名称和类型进行筛选。没有其他可用字段。

authorizedCollections

布尔

可选。一个标记,当设置为 true 并与 nameOnly: true 一起使用时,允许没有所要求的特权(即数据库上的listCollections 操作)的用户在强制执行访问控制期间运行命令。

authorizedCollectionsnameOnly 选项均设置为 true 时,该命令仅返回用户对其拥有特权的集合。例如,如果用户有权对特定集合执行 find 操作,则该命令仅返回这些集合;或者,如果用户有权对数据库资源执行 find 或任何其他操作,则该命令将列出数据库中的所有集合。

默认值为 false。也就是说,用户必须有权对数据库执行 listCollections 操作才能运行命令。

对于有权对数据库执行 listCollections 操作的用户,此选项无效,因为该用户有权列出数据库中的集合。

不与 nameOnly: true 一起使用时,此选项无效。也就是说,在实施访问控制期间,用户必须具有运行命令所需的特权。否则,用户无权运行命令。

comment

any

可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:

注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。

listCollections 命令上设置的任何注释都将由在 listCollections 游标上运行的任何后续 getMore 命令继承。

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.

listCollections lock behavior:

  • Earlier than MongoDB 5.0, listCollections takes an intent shared lock lock on each collection in the database when listCollections holds an intent shared lock on the database.

  • Starting in MongoDB 5.0, listCollections doesn't take an intent shared lock on a collection or database. listCollections isn't blocked by operations holding an exclusive write lock on a collection.

To learn about locks, see FAQ: Concurrency.

从 MongoDB 4.2 开始,如果在操作完成之前,发出 listCollections 的客户端断开连接,MongoDB 将使用killOplistCollections 标记为终止。

若要在副本集节点上运行,listCollections 操作要求该节点处于 PRIMARYSECONDARY 状态。如果该节点处于其他状态,如 STARTUP2,则操作错误。

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" ] }

内置角色 read 提供为特定数据库运行 listCollections 的特权。

authorizedCollectionsnameOnly 都设置为 true 时,没有所需的 read 特权的用户可以运行 listCollections。在这种情况下,该命令将返回用户对其拥有特权的集合的名称和类型。

例如,假设某个用户具有授予以下 find 特权的角色:

{ resource: { db: "sales", collection: "currentQuarter" }, actions: [ "find" ] }

如果 authorizedCollectionsnameOnly 都设置为 true,用户就可以运行 listCollections

db.runCommand(
{
listCollections: 1.0,
authorizedCollections: true,
nameOnly: true
}
)

该操作将返回 currentQuarter 集合的名称和类型。

但是,如果用户没有所需访问授权,以下操作会返回错误:

db.runCommand(
{
listCollections: 1.0,
authorizedCollections: true
}
)
db.runCommand(
{
listCollections: 1.0,
nameOnly: true
}
)

mongosh 方法 show collections 类似于:

db.runCommand(
{
listCollections: 1.0,
authorizedCollections: true,
nameOnly: true
}
)
  • 对于具有所需访问权限的用户,show collections 将列出数据库的非系统集合。

  • 对于不具有所需访问权限的用户,show collections 仅列出用户对其拥有特权的集合。

listCollections.cursor

A 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:

字段
类型
说明

name

字符串

集合的名称。

type

字符串

Type of data store. Returns collection for collections, view for views, and timeseries for 时间序列集合.

选项

文档

Collection options.

These options correspond directly to the options available in db.createCollection(). For the descriptions on the options, see db.createCollection().

info

文档

Lists the following fields related to the collection:

readOnly
boolean. If true the 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

文档

Provides information on the _id index for the collection.

listCollections.ok

The return value for the command. A value of 1 indicates success.

The music database contains three collections, motorhead, taylorSwift, and ramones.

To list the collections in the database, you can use the built-in mongosh 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: 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
}

For collection options:

For collection information: