导读:本期聚焦于唐振业创作的《MongoDB Shell (mongosh)常用命令有哪些?一文搞定数据库增删改查》,敬请观看详情。mongosh 是 MongoDB 官方推荐的新一代命令行工具,取代了老版的 mongo 壳。刚接触 MongoDB 的朋友常常在数据库切换、集合创建、文档增删改查这些基础操作上反复查资料。这篇文章系统整理了 mongosh 的常用命令,包括数据库与集合管理、insertOne、find、updateOne、deleteOne 等核心 CRUD 写法,还有索引创建、聚合管道入门以及用户权限配置等进阶内容。每个命令都配有可直接运行的示例和参数说明,帮你快速上手 mongosh,提高日常数据库运维和开发调试效率。

mongosh 是 MongoDB 官方推出的新一代 Shell 工具,从 MongoDB 6.0 开始已经完全取代了老的 mongo 客户端。相比旧版,mongosh 基于 Node.js 构建,支持语法高亮、命令自动补全和历史记录搜索,用起来顺手得多。本文把日常开发和运维中最常用到的命令做了系统梳理,从连接数据库、切换库表,到文档的增删改查、索引管理和聚合查询,每一条都配上可直接复制运行的示例。

MongoDB Shell (mongosh)常用命令有哪些?一文搞定数据库增删改查

一、连接数据库与基础操作

先说连接。最基本的方式是直接在命令行输入 mongosh,不带参数时会连接本机默认端口 27017。如果数据库部署在远程服务器或者开启了认证,就需要指定完整连接串:

mongosh "mongodb://localhost:27017"
mongosh --host 192.168.1.100 --port 27017 -u admin -p 密码 --authenticationDatabase admin

进入 Shell 之后,最先要掌握的是几个查看类命令。show dbs 列出当前实例下的所有数据库,use mydb 切换到指定数据库(如果不存在,插入第一条数据时会自动创建),show collections 查看当前库中的所有集合,db 单独执行时显示当前所在的数据库。

show dbs          // 列出所有数据库
use shop          // 切换到 shop 库
show collections  // 查看集合列表
db                // 显示当前数据库名
db.stats()        // 查看当前库的统计信息
db.dropDatabase() // 删除当前数据库(慎用)

需要提醒一点,mongosh 删除数据库没有任何确认提示,执行 db.dropDatabase() 前一定要先执行 db 确认自己没连错库。生产环境建议先做备份再操作。

二、文档的增删改查(CRUD)

CRUD 是日常使用频率最高的部分。插入操作有三个方法:insertOne 插入单条文档,insertMany 插入多条,旧的 insert 虽然还能用但已不推荐。看下面的例子:

db.users.insertOne({ name: "张三", age: 28, city: "北京" })

db.users.insertMany([
  { name: "李四", age: 35, city: "上海" },
  { name: "王五", age: 22, city: "广州" }
])

查询方面,find 是核心。不带参数返回全部文档,带条件时使用查询运算符,比如 $gt(大于)、$in(包含于)、$regex(正则匹配)等。格式化输出可以加 pretty(),mongosh 默认输出已经比较易读。

db.users.find()                              // 查全部
db.users.find({ age: { $gt: 25 } })          // 年龄大于25
db.users.find({ city: { $in: ["北京", "上海"] } })
db.users.findOne({ name: "张三" })           // 查单条
db.users.find().sort({ age: -1 }).limit(5)   // 按年龄倒序取前5条
db.users.find({ name: /张/ })                // 正则模糊查询

更新操作推荐用 updateOne 和 updateMany,必须配合更新运算符,比如 $set 设置字段、$inc 自增、$unset 删除字段。第三个参数 { upsert: true } 表示找不到匹配文档时就插入一条新记录,这个用法在做数据同步时很实用。

db.users.updateOne({ name: "张三" }, { $set: { age: 29 } })
db.users.updateMany({ city: "北京" }, { $inc: { age: 1 } })
db.users.updateOne(
  { name: "赵六" },
  { $set: { city: "深圳" } },
  { upsert: true }
)

删除对应的就是 deleteOne 和 deleteMany。特别强调:不带条件执行 deleteMany({}) 会清空整个集合,属于高危操作,执行前建议先用相同的查询条件跑一遍 find 确认影响范围。

db.users.deleteOne({ name: "王五" })
db.users.deleteMany({ city: "广州" })
db.users.countDocuments({ age: { $gt: 25 } }) // 统计符合条件的文档数

三、索引、聚合与常用辅助命令

当数据量上来之后,查询慢多半是缺索引。用 createIndex 创建索引,1 表示升序,-1 表示降序,还可以建复合索引和唯一索引:

db.users.createIndex({ name: 1 })                  // 单字段索引
db.users.createIndex({ city: 1, age: -1 })          // 复合索引
db.users.createIndex({ email: 1 }, { unique: true })// 唯一索引
db.users.getIndexes()                               // 查看已有索引
db.users.dropIndex("name_1")                        // 删除指定索引
db.users.find({ name: "张三" }).explain("executionStats") // 查看执行计划

聚合管道 aggregate 用来做分组统计,相当于 SQL 里的 group by。下面的例子按城市分组统计人数并求平均年龄,$match 过滤、$group 分组、$sort 排序,阶段顺序很关键,把 $match 放前面可以利用索引减少扫描量。

db.users.aggregate([
  { $match: { age: { $gte: 18 } } },
  { $group: { _id: "$city", count: { $sum: 1 }, avgAge: { $avg: "$age" } } },
  { $sort: { count: -1 } }
])

最后补充几个运维场景的高频命令:集合的重命名、清空与删除,以及用户权限管理。mongosh 中创建用户要切换到 admin 库,角色 readWrite 只对指定库生效,root 则是超级管理员权限。

db.users.renameCollection("members")   // 重命名集合
db.users.deleteMany({})               // 清空集合数据
db.users.drop()                       // 删除整个集合

use admin
db.createUser({
  user: "appuser",
  pwd: "your_password",
  roles: [ { role: "readWrite", db: "shop" } ]
})
db.getUsers()                          // 查看用户列表
show logs                              // 查看日志(最新几条)

掌握这些命令后,日常开发调试和大部分运维场景基本都能应付。建议在练习环境里把每个命令亲手跑一遍,尤其注意查询运算符和更新运算符的区别,写错位置是新手最常见的报错原因。

mongosh常用命令MongoDB Shell数据库操作修改时间:2026-09-11 14:00:35

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0911/54701.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。