首页/数据/NoSQL 速查/db.runCommand 调用数据库命令
MongoDB99 条

db.runCommand 调用数据库命令

管理类能力大多以数据库命令形式提供,均可通过 db.runCommand({...}) 调用,如 ping、buildInfo、collStats。

NoSQL 速查数据更新于 2026-10-13

runCommand 的地位

MongoDB 的管理能力大多以「数据库命令」的形式提供,统一通过 db.runCommand({...}) 调用,mongosh 里的很多便捷方法只是对它的封装。理解这层关系的好处是:当某个便捷方法在某版本上不存在,或者驱动没提供对应封装时,仍然可以用命令形式完成同样的操作。

基本信息

形式db.runCommand({ <命令名>: <参数> })(mongosh 内)
常用命令ping / buildInfo / serverStatus / collStats / collMod / currentOp / hello
管理类createIndexes、listCollections、dbStats、listDatabases、replSetGetStatus
驱动侧各语言驱动的 db.command() 或 runCommand 等价方法
权限要求随命令而定,管理类命令通常需要相应角色
返回结构ok 字段为 1 表示成功,其余字段随命令而定

典型使用场景

  • 连通性探测:ping 检查实例是否响应
  • 版本核对:buildInfo 取版本与存储引擎信息,跨版本脚本先确认再断言参数
  • 运行状态巡检:serverStatus 采集连接、操作计数与内存指标
  • 集合维护:collMod 修改校验器或调整集合选项
  • 元数据查询:listCollections、listDatabases 做资产盘点
  • 复制集诊断:replSetGetStatus 查看成员角色与延迟

常用命令示例

常用命令示例
db.runCommand({ ping: 1 })                       // 连通性探测
db.runCommand({ buildInfo: 1 }).version          // 版本信息,跨版本脚本先核对
db.runCommand({ serverStatus: 1 }).connections   // 连接与运行指标
db.runCommand({ collStats: "orders" })           // 集合与索引占用

db.runCommand({ listCollections: 1, filter: { name: /^order/ } })  // 元数据查询

db.runCommand({ replSetGetStatus: 1 }).members.map(function (m) {  // 复制成员状态
  return { name: m.name, state: m.stateStr, lag: m.optimeDate }
})

// 命令失败时先看返回里的 ok 与 errmsg,而不是捕获异常后猜原因

常用命令对照

命令用途注意点
ping连通性探测成功返回 ok 为 1,不含其他信息
buildInfo版本与构建信息跨版本脚本的前置检查项
serverStatus实例运行指标输出较大,按字段取用而不是全量打印
collStats集合与索引占用分片集合会向各分片采集
collMod修改集合选项与校验器属于变更操作,建议先在测试环境验证
listCollections / listDatabases元数据盘点权限不足时结果被过滤,不代表对象不存在
命令参数随版本演进:跨版本脚本跑之前先用 buildInfo 确认目标版本,再断言具体参数是否存在,比在报错里逐条试错高效得多。
管理类命令里有不少是变更操作(如 collMod、createIndexes):在生产环境执行前确认影响范围,并保留执行记录便于回滚。

易错点

  • 跨版本脚本依赖特定命令参数:参数名或返回值结构在版本间有变化,先取版本再断言
  • 只捕获异常不看返回内容:命令失败时返回体里的错误信息最直接,忽略它会让排查绕远路
  • 把 collMod 之类的变更命令当查询随手执行:一次误执行就改掉了线上集合的行为
  • 用 runCommand 打印全量 serverStatus:输出极大且拖慢会话,应按需取字段

数据来源与参考

  • MongoDB Manual: Database Commands
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌