对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

listCollections(数据库命令)

listCollections

检索数据库中集合和视图的信息,包括名称和创建选项。

listCollections 命令返回一个文档,其中包含数据库中所有集合和视图的未排序列表。您可以使用返回的文档在集合上创建游标。

mongosh provides the db.getCollectionInfos() and the db.getCollectionNames() helper methods, as well as the show collections command.

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

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

注意

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

该命令具有以下语法:

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

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

字段
类型
说明

filter

文档

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

You can specify a query predicate on any of the fields returned by 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 锁行为:

  • MongoDB 5.0 以前的版本,当 listCollections 持有数据库上的意向共享锁时,listCollections 会在数据库中的每个集合上获取意向共享锁

  • 从 MongoDB 5.0 开始,listCollections 不再对集合或数据库采用意图共享锁。listCollections 不会被对集合持有独占写锁的操作阻止。

要了解锁的相关信息,请参阅常见问题解答:并发。

If the client that issued listCollections disconnects before the operation completes, MongoDB marks listCollections for termination using killOp.

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.

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.

例如,以下命令授予对 test 数据库运行 db.getCollectionInfos() 的特权:

{ 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
}
)
listCollections.cursor

一个文档,其中包含创建游标包含集合名称和选项的文档的游标所需的信息。游标信息包括游标id、命令的完整命名空间和第一批批处理结果。批处理输出中的每个文档都包含以下字段:

字段
类型
说明

名称

字符串

集合的名称。

类型

字符串

Type of data store. Returns collection for collections, view for views, and timeseries for time series collection.

选项

文档

集合选项。

这些选项与 db.createCollection() 中的选项直接对应。有关选项的说明,请参阅 db.createCollection()

信息

文档

列出与集合相关的以下字段:

只读
boolean。如果为 true,则数据存储为只读。
uuid
UUID。建立后,集合 UUID 就不会更改。集合 UUID 在分片集群的副本集成员和分片中保持不变。

idIndex

文档

提供有关集合的 _id 索引信息。

listCollections.ok

命令的返回值。值为 1 表示成功。

如果不需要原始命令响应,请使用 db.getCollectionInfos()db.getCollectionNames() 辅助程序。

music 数据库包含三个集合:motorheadtaylorSwiftramones

要获取集合名称列表,运行带有 nameOnly 选项的 listCollections 命令。

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

输出见下:

{
cursor: {
id: Long("0"),
ns: 'music.$cmd.listCollections',
firstBatch: [
{ name: 'motorhead', type: 'collection' },
{ name: 'taylorSwift', type: 'collection' },
{ name: 'ramones', type: 'collection' }
]
},
ok: 1
}

要获取更多详细信息,请删除 nameOnly 选项。

db.runCommand(
{
listCollections: 1.0
}
)

输出见下:

{
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
}

对于集合选项:

有关集合信息: