文档菜单
文档首页
/
MongoDB 手册
/ / /

listCollections

本页内容

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 所需访问权限
  • 输出
  • 示例
  • 了解更多
listCollections

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

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

mongosh 提供了 db.getCollectionInfos()db.getCollectionNames() 辅助方法。

此命令可在以下环境中部署

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

注意

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

该命令具有以下语法

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

该命令可以接受以下可选字段

字段
类型
描述
筛选器
文档

可选。一个查询谓词,用于筛选集合列表。

您可以在返回的字段上指定查询谓词,这些字段由listCollections返回。

nameOnly
布尔值

可选。一个标志,用于指示命令是否仅返回名称和类型(viewcollectiontimeseries)或返回名称和其他信息。

默认值是false

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

authorizedCollections
布尔值

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

当同时设置authorizedCollectionsnameOnly选项为true时,命令仅返回用户具有权限的集合。例如,如果用户在特定集合上有find操作,则命令仅返回这些集合;或者,如果用户在数据库资源上具有find或任何其他操作,则命令列出数据库中的所有集合。

默认值是false。即,用户必须在数据库上具有listCollections操作才能运行命令。

对于具有数据库上listCollections操作的用户的选项没有影响,因为用户有权列出数据库中的集合。

当不与nameOnly: true一起使用时,此选项没有影响。即,当强制执行访问控制时,用户必须具有运行命令所需的权限。否则,用户无权运行该命令。

comment
任何

可选。用户提供的注释,用于附加到此命令。一旦设置,此注释将出现在以下位置的此命令记录旁边

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

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

使用过滤器限制 listCollections 的结果。您可以在 listCollections 结果集中返回的任何 字段 上指定 filter

listCollections 锁的行为

  • 在 MongoDB 5.0 之前,listCollectionslistCollections 持有数据库的意向共享锁时,会对数据库中的每个集合都加一个意向共享锁。

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

关于锁的更多信息,请参阅FAQ:并发。

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

要在副本集成员上运行,listCollections 操作需要该成员处于 PRIMARYSECONDARY 状态。如果成员处于其他状态,例如 STARTUP2,操作将报错。

当启用访问控制时,listCollections命令需要listCollections操作。用户必须拥有在数据库上执行listCollections操作的权限。

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

{ resource: { db: "test", collection: "" }, actions: [ "listCollections" ] }

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

如果没有所需的read权限,用户可以在authorizedCollectionsnameOnly都设置为true时运行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

包含用于创建包含集合名称和选项的文档游标的文档。游标信息包括游标ID、命令的完整命名空间以及第一批结果。批输出中的每个文档都包含以下字段

字段
类型
描述
名称
字符串
集合名称。
类型
字符串
数据存储类型。对于集合返回 collection,对于集合,对于视图返回 view,对于时间序列集合返回 timeseries
选项
文档

集合选项。

这些选项直接对应于 db.createCollection() 中可用的选项。有关选项的描述,请参阅 db.createCollection()

信息
文档

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

只读
布尔值。如果为 true,则数据存储为只读。
uuid
UUID。一旦建立,集合UUID不会更改。集合UUID在副本集成员和分片集群中的分片中保持相同。
idIndex
文档
提供有关集合的 _id 索引的信息。
listCollections.ok

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

数据库 music 包含三个集合,分别是 motorheadtaylorSwiftramones

要列出数据库中的集合,可以使用内置的 mongosh 命令,show collections。

show collections

输出结果

motorhead
ramones
taylorSwift

要使用 listCollections 集合命令获取类似的列表,使用 nameOnly 选项。

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
}

关于集合选项

关于集合信息

返回

killOp