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 中的文档会以 name 和 type 标识每个数据存储区,类型可能是 collection、view 或 timeseries。需要集合选项、只读状态、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 }
)
[]
需要 options、info.readOnly、info.uuid 或 idIndex 等元数据时,省略 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 操作要求成员处于 PRIMARY 或 SECONDARY 状态。
如需完整字段列表和访问规则,请参阅 MongoDB 关于 listCollections、db.getCollectionInfos() 和 db.getCollectionNames() 的文档。