HOWTO · MongoDB

如何在 MongoDB 中列出集合

学习如何在 mongosh 中使用 show collections、getCollectionNames、listCollections 和 getCollectionInfos 列出 MongoDB 集合。

本页内容

MongoDB 会将文档存储在集合中。当你需要查看数据库中有哪些集合时,可以使用下面的 mongosh 命令或辅助方法。最简短的答案是 show collections;其他选项会返回 JavaScript 数组或可以筛选的集合元数据。

选择要检查的数据库

列出集合的命令作用于当前数据库。运行任何示例前,先选择数据库:

use catalog

catalog 替换为你的数据库名称。数据库名称区分大小写。如果你不确定服务器上有哪些数据库,可以先运行 show dbs,再切换到要检查的数据库。

使用 show collections 快速列出集合

当你只需要在交互式 Shell 中获取易读的列表时,运行以下 mongosh 命令:

show collections

输出取决于当前数据库中的集合和视图。mongosh 可以在输出中标注 view 和 time-series collection。具有所需权限时,show collections 会列出数据库中的非系统集合;权限受限时,只会列出用户可以访问的集合。

system.views 这样的名称是 MongoDB 为支持视图而生成的名称,不是应用程序集合。

这个命令适合在 Shell 提示符中快速确认。如果脚本需要数组、集合选项或需要筛选结果,应使用其他方法。

使用 db.getCollectionNames() 返回集合名称

db.getCollectionNames() 会返回当前数据库中集合和视图的名称数组:

db.getCollectionNames()

例如,包含两个集合和一个视图的数据库可能返回下面的数组:

[ "activeProducts", "clients", "products", "system.views" ]

返回的顺序不应视为可靠的排序。如果顺序很重要,请在 JavaScript 代码中排序:

db.getCollectionNames().sort()

当你要在循环或小型 Shell 脚本中使用名称时,这个方法很方便。但它不会返回集合选项,也不会告诉你每个名称代表普通集合、view 还是 time-series collection。

使用 listCollections 返回原始命令结果

listCollections 数据库命令会返回包含集合和视图信息的游标。只需要每个名称和类型时,使用 nameOnly: true

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

cursor.firstBatch 中的文档会以 nametype 标识每个数据存储区,类型可能是 collectionviewtimeseries。需要集合选项、只读状态、UUID 或 _id 索引信息时,移除 nameOnly: true。这个命令返回未排序的列表;如果需要固定顺序,请在客户端排序结果。

authorizedCollections: true 必须和 nameOnly: true 一起使用才会产生这里所说的效果。即使用户没有数据库级别的 listCollections 权限,也可以查看其拥有权限的集合名称和类型。没有所需访问权限时,完整的元数据形式可能会返回授权错误。

使用 db.getCollectionInfos() 检查或筛选元数据

db.getCollectionInfos(filter, options)mongosh 中用于检查集合元数据的方法。如果只需要名称和类型,请在 options 文档中传入 nameOnly

db.getCollectionInfos({}, { nameOnly: true })

包含一个视图和两个集合的数据库可能产生以下输出:

[{"name":"activeProducts","type":"view"},{"name":"clients","type":"collection"},{"name":"products","type":"collection"},{"name":"system.views","type":"collection"}]

要检查单个集合,可以按名称筛选:

db.getCollectionInfos(
  { name: "clients" },
  { nameOnly: true }
)
[{"name":"clients","type":"collection"}]

如果筛选条件没有匹配的集合,该方法会返回空数组:

db.getCollectionInfos(
  { name: "missing" },
  { nameOnly: true }
)
[]

需要 optionsinfo.readOnlyinfo.uuididIndex 等元数据时,省略 nameOnly。UUID 会针对特定集合生成,因此不要将示例中的 UUID 复制到文档或测试预期中。你也可以按元数据返回的字段筛选,例如 { "info.readOnly": true }

选择合适的集合列表方法

需求 使用方法
mongosh 中快速获取易读列表 show collections
获取名称的 JavaScript 数组 db.getCollectionNames()
获取原始数据库命令和游标 db.runCommand({ listCollections: 1, ... })
获取集合/视图元数据或进行筛选 db.getCollectionInfos(filter, options)

以上命令适用于当前的 mongosh Shell。较旧的教程可能使用旧版 mongo Shell;当前的 MongoDB 安装请使用 mongosh。可用的名称和元数据仍取决于所选数据库及用户权限。在副本集成员上运行时,listCollections 操作要求成员处于 PRIMARYSECONDARY 状态。

如需完整字段列表和访问规则,请参阅 MongoDB 关于 listCollectionsdb.getCollectionInfos()db.getCollectionNames() 的文档。