Loading...

|

一、连接与基础入门

1.1 连接MongoDB Shell

操作 命令 说明
本地连接 mongosh 或 mongo 默认连接到 mongodb://127.0.0.1:27017
指定主机和端口 mongosh --host <host> --port <port> 连接远程MongoDB服务器
带认证连接 mongosh -u <username> -p <password> --authenticationDatabase admin 使用用户名密码认证连接
MongoDB Atlas连接 mongosh "mongodb+srv://cluster-name.abcde.mongodb.net/" --username <username> 连接MongoDB Atlas云服务
查看当前数据库 db 打印当前使用的数据库名称
查看所有数据库 show dbs 或 show databases 列出所有有权限查看的数据库
切换数据库 use <database> 切换到指定数据库,不存在则自动创建
查看所有集合 show collections 或 show tables 列出当前数据库中的所有集合
运行JavaScript文件 load("myScript.js") 加载并执行外部JavaScript文件
退出Shell exit 或 quit 退出MongoDB Shell

1.2 帮助与信息命令

操作 命令 说明
查看帮助 help 显示Shell级别的帮助信息
数据库方法帮助 db.help() 显示数据库对象的所有可用方法
集合方法帮助 db.collection.help() 显示集合对象的所有可用方法
查看MongoDB版本 db.version() 返回当前MongoDB服务器版本
查看主机信息 db.hostInfo() 返回服务器主机信息
查看服务器状态 db.serverStatus() 返回服务器运行状态统计

cover: 附件/Halo封面/database.jpg

二、数据库管理命令

操作 命令 说明
创建/切换数据库 use <database> MongoDB中数据库在首次插入数据时才会真正创建
查看当前数据库 db 返回当前使用的数据库名称
查看所有数据库 show dbs 列出所有数据库及其大小
查看数据库统计 db.stats() 返回当前数据库的统计信息(集合数、索引数、数据大小等)
删除当前数据库 db.dropDatabase() 删除当前使用的数据库,谨慎操作
修复数据库 db.repairDatabase() 修复并压缩数据库,回收磁盘空间
克隆数据库 db.cloneDatabase("<hostname>") 从远程服务器复制整个数据库
复制数据库 db.copyDatabase("<from_db>", "<to_db>") 将源数据库复制到目标数据库

保留数据库说明:

  • admin:权限根数据库,存储用户认证和角色信息
  • local:存储本地单服务器数据,永远不会被复制
  • config:用于分片设置时保存分片相关信息

cover: 附件/Halo封面/database.jpg

三、集合(Collection)管理命令

操作 命令 说明
显式创建集合 db.createCollection("<name>") 手动创建集合
隐式创建集合 直接向不存在的集合插入文档 推荐方式,集合会自动创建
查看所有集合 show collections 列出当前数据库中的所有集合
重命名集合 db.<collection>.renameCollection("<new_name>") 重命名集合
查看集合统计 db.<collection>.stats() 返回集合的详细统计信息
查看集合大小 db.<collection>.dataSize() 返回集合数据占用的字节数
查看集合总大小 db.<collection>.totalSize() 返回集合数据+索引的总大小
查看集合存储大小 db.<collection>.storageSize() 返回集合分配的存储空间大小
删除集合 db.<collection>.drop() 删除集合,返回true表示成功
验证集合 db.<collection>.validate() 验证集合数据完整性

cover: 附件/Halo封面/database.jpg

四、文档CRUD操作

4.1 插入文档(Create)

操作 命令 说明
插入单文档 db.<collection>.insertOne({…}) 插入一条文档,返回包含_id的结果
插入多文档 db.<collection>.insertMany([{…}, {…}]) 批量插入多条文档
通用插入 db.<collection>.insert({…}) 可插入单条或多条文档
无序批量插入 db.<collection>.insertMany([…], {ordered: false}) 某条失败继续插入其余文档
带写入关注 db.<collection>.insert({…}, {writeConcern: {w: "majority", wtimeout: 5000}}) 指定写入确认级别

插入示例:

// 插入单条文档
db.users.insertOne({
    name: "张三",
    age: 25,
    email: "zhangsan@example.com",
    tags: ["developer", "mongodb"],
    create_time: new Date()
})

// 批量插入
db.users.insertMany([
    {name: "李四", age: 30, email: "lisi@example.com"},
    {name: "王五", age: 28, email: "wangwu@example.com"}
])

注意:若未指定_id字段,MongoDB会自动生成ObjectId类型的主键。整型需用NumberInt()声明,否则默认为double类型。

4.2 查询文档(Read)

操作 命令 说明
查询所有文档 db.<collection>.find() 返回所有文档(返回20条,输入it显示更多)
格式化输出 db.<collection>.find().pretty() 美化JSON格式输出
查询单文档 db.<collection>.findOne({…}) 返回第一个匹配的文档
条件查询 db.<collection>.find({field: value}) 按字段值查询
投影查询 db.<collection>.find({}, {field1: 1, field2: 0}) 1表示显示,0表示隐藏
排序查询 db.<collection>.find().sort({field: 1/-1}) 1升序,-1降序
限制数量 db.<collection>.find().limit(n) 返回前n条文档
跳过文档 db.<collection>.find().skip(n) 跳过前n条文档
分页查询 db.<collection>.find().limit(n).skip(m) 每页n条,跳过m条
统计数量 db.<collection>.countDocuments({…}) 精确计数
估算数量 db.<collection>.estimatedDocumentCount() 基于元数据快速估算
去重查询 db.<collection>.distinct("field") 返回字段的去重值数组
查看执行计划 db.<collection>.find({…}).explain("executionStats") 分析查询性能

4.3 比较运算符

运算符 说明 示例
$eq 等于 {age: {$eq: 25}}
$ne 不等于 {age: {$ne: 25}}
$gt 大于 {age: {$gt: 25}}
$gte 大于等于 {age: {$gte: 25}}
$lt 小于 {age: {$lt: 25}}
$lte 小于等于 {age: {$lte: 25}}
$in 在列表中 {tags: {$in: ["mongodb", "database"]}}
$nin 不在列表中 {tags: {$nin: ["mysql"]}}

4.4 逻辑运算符

运算符 说明 示例
$and 逻辑与 {$and: [{age: {$gt: 20}}, {age: {$lt: 30}}]}
$or 逻辑或 {$or: [{name: "张三"}, {age: 25}]}
$nor 逻辑或非 {$nor: [{price: 1.99}, {sale: true}]}
$not 逻辑非 {age: {$not: {$gt: 25}}}

4.5 元素运算符

运算符 说明 示例
$exists 字段是否存在 {email: {$exists: true}}
$type 按字段类型查询 {age: {$type: "int"}} 或 {age: {$type: 16}}

4.6 数组运算符

运算符 说明 示例
$all 包含所有指定元素 {tags: {$all: ["mongodb", "database"]}}
$elemMatch 至少一个元素匹配所有条件 {scores: {$elemMatch: {$gte: 80, $lt: 90}}}
$size 数组长度匹配 {tags: {$size: 3}}

4.7 更新文档(Update)

操作 命令 说明
更新单文档 db.<collection>.updateOne({filter}, {$set: {field: value}}) 更新匹配的第一条文档
更新多文档 db.<collection>.updateMany({filter}, {$set: {field: value}}) 更新所有匹配的文档
替换文档 db.<collection>.replaceOne({filter}, {new_doc}) 用新文档完全替换旧文档
通用更新 db.<collection>.update({filter}, {update}, {upsert: true}) 支持更多选项
更新并返回 db.<collection>.findOneAndUpdate({filter}, {update}, {returnNewDocument: true}) 返回更新后的文档

更新操作符:

操作符 说明 示例
$set 设置字段值 {$set: {age: 26}}
$unset 删除字段 {$unset: {temp_field: ""}}
$inc 数值递增/递减 {$inc: {count: 1, score: -5}}
$mul 数值乘法 {$mul: {price: 1.1}}
$rename 重命名字段 {$rename: {"old_name": "new_name"}}
$min 比较后取最小值更新 {$min: {lowScore: 50}}
$max 比较后取最大值更新 {$max: {highScore: 95}}
$currentDate 设置当前日期 {$currentDate: {lastModified: true}}

数组更新操作符:

操作符 说明 示例
$push 向数组添加元素 {$push: {tags: "new_tag"}}
$addToSet 去重后添加 {$addToSet: {tags: "unique_tag"}}
$pop 移除首/尾元素 {$pop: {tags: 1}}(1尾,-1首)
$pull 移除匹配元素 {$pull: {tags: "old_tag"}}
$pullAll 移除多个元素 {$pullAll: {tags: ["a", "b"]}}
$each 批量操作数组 {$push: {tags: {$each: ["a", "b"]}}}

4.8 删除文档(Delete)

操作 命令 说明
删除单文档 db.<collection>.deleteOne({filter}) 删除匹配的第一条文档
删除多文档 db.<collection>.deleteMany({filter}) 删除所有匹配的文档
删除并返回 db.<collection>.findOneAndDelete({filter}) 删除并返回被删除的文档
删除所有文档 db.<collection>.deleteMany({}) 删除集合中所有文档(不删除集合)
通用删除 db.<collection>.remove({filter}, {justOne: true}) 传统删除方法

cover: 附件/Halo封面/database.jpg

五、索引管理命令

5.1 索引操作

操作 命令 说明
创建单字段索引 db.<collection>.createIndex({field: 1}) 1升序,-1降序
创建复合索引 db.<collection>.createIndex({field1: 1, field2: -1}) 多字段组合索引
创建唯一索引 db.<collection>.createIndex({field: 1}, {unique: true}) 确保字段值唯一
创建文本索引 db.<collection>.createIndex({field: "text"}) 支持全文搜索
创建地理空间索引 db.<collection>.createIndex({location: "2dsphere"}) 支持地理位置查询
创建哈希索引 db.<collection>.createIndex({field: "hashed"}) 用于分片
创建TTL索引 db.<collection>.createIndex({date: 1}, {expireAfterSeconds: 3600}) 文档自动过期
创建部分索引 db.<collection>.createIndex({field: 1}, {partialFilterExpression: {field: {$gt: 0}}}) 只索引符合条件的文档
查看所有索引 db.<collection>.getIndexes() 列出集合的所有索引
查看索引大小 db.<collection>.totalIndexSize() 返回所有索引的总大小
删除指定索引 db.<collection>.dropIndex("index_name") 按名称删除索引
删除所有索引 db.<collection>.dropIndexes() 删除除_id外的所有索引
隐藏索引 db.<collection>.hideIndex("index_name") 隐藏索引(4.4+),测试后决定是否删除
显示索引 db.<collection>.unhideIndex("index_name") 取消隐藏索引
重建索引 db.<collection>.reIndex() 重建集合上的所有索引

5.2 索引类型速查

索引类型 命令示例 适用场景
单字段索引 db.users.createIndex({age: 1}) 单字段查询
复合索引 db.users.createIndex({age: 1, name: -1}) 多字段组合查询
多键索引 自动创建 数组字段索引
文本索引 db.articles.createIndex({content: "text"}) 全文搜索
地理空间索引 db.places.createIndex({loc: "2dsphere"}) 地理位置查询
哈希索引 db.users.createIndex({user_id: "hashed"}) 分片键
TTL索引 db.logs.createIndex({createdAt: 1}, {expireAfterSeconds: 86400}) 自动过期删除
唯一索引 db.users.createIndex({email: 1}, {unique: true}) 确保值唯一

cover: 附件/Halo封面/database.jpg

六、聚合管道(Aggregation Pipeline)

6.1 聚合框架

聚合管道是MongoDB数据分析的核心工具,基于数据处理流水线的概念,文档经过多个阶段(Stage)的处理,最终输出聚合结果。

6.2 常用管道阶段(Stage)

阶段 说明 示例
$match 过滤文档(类似WHERE) {$match: {status: "active"}}
$group 分组并执行聚合计算 {$group: {_id: "$category", total: {$sum: 1}}}
$project 选择/重命名字段(类似SELECT) {$project: {name: 1, age: 1, _id: 0}}
$sort 排序 {$sort: {age: -1}}
$limit 限制输出数量 {$limit: 10}
$skip 跳过指定数量 {$skip: 10}
$unwind 展开数组字段 {$unwind: "$tags"}
$lookup 关联查询(类似JOIN) {$lookup: {from: "orders", localField: "_id", foreignField: "user_id", as: "orders"}}
$addFields 添加新字段 {$addFields: {fullName: {$concat: ["$first", " ", "$last"]}}}
$count 统计文档数量 {$count: "total"}
$out 将结果写入新集合 {$out: "new_collection"}
$merge 将结果合并到现有集合 {$merge: {into: "target", on: "_id"}}
$facet 多维度分组 {$facet: {group1: […], group2: […]}}
$bucket 按区间分组 {$bucket: {groupBy: "$age", boundaries: [0, 18, 30, 50, 100]}}
$sortByCount 按计数排序分组 {$sortByCount: "$category"}

6.3 常用聚合表达式操作符

操作符 说明 示例
$sum 求和 {$sum: "$price"}
$avg 求平均值 {$avg: "$age"}
$min 最小值 {$min: "$score"}
$max 最大值 {$max: "$score"}
``$push 将所有值放入数组 {$push: "$name"}
$addToSet 去重后放入数组 {$addToSet: "$tag"}
$first 取第一个值 {$first: "$name"}
$last 取最后一个值 {$last: "$name"}
$concat 字符串连接 {$concat: ["$first", " ", "$last"]}
$substr 子字符串 {$substr: ["$name", 0, 3]}
$toUpper 转大写 {$toUpper: "$name"}
$toLower 转小写 {$toLower: "$name"}
$year 提取年份 {$year: "$date"}
$month 提取月份 {$month: "$date"}
$dayOfMonth 提取日期 {$dayOfMonth: "$date"}
$cond 条件表达式 {$cond: {if: {$gte: ["$score", 60]}, then: "pass", else: "fail"}}

6.4 聚合示例

// 统计每个年龄段的人数
db.users.aggregate([
    { $group: { _id: "$age", count: { $sum: 1 } } },
    { $sort: { _id: 1 } }
])

// 关联查询:获取用户及其订单
db.users.aggregate([
    { $match: { status: "active" } },
    { $lookup: {
        from: "orders",
        localField: "_id",
        foreignField: "user_id",
        as: "orders"
    }},
    { $project: { name: 1, email: 1, orderCount: { $size: "$orders" } } }
])

// 电影平均评分
db.reviews.aggregate([
    { $group: { _id: "$movie_id", averageRating: { $avg: "$rating" } } }
])

cover: 附件/Halo封面/database.jpg

七、用户与权限管理命令

7.1 用户管理

操作 命令 说明
创建用户 db.createUser({user: "username", pwd: "password", roles: […]}) 在admin库中创建用户
查看所有用户 db.getUsers() 或 show users 列出当前数据库的所有用户
查看指定用户 db.getUser("username") 查看用户的详细信息
修改密码 db.changeUserPassword("username", "new_password") 修改用户密码
更新用户 db.updateUser("username", {roles: […]}) 更新用户角色和属性
删除用户 db.dropUser("username") 删除指定用户
删除所有用户 db.dropAllUsers() 删除当前数据库的所有用户
用户认证 db.auth("username", "password") 验证用户身份

创建管理员用户示例:

use admin
db.createUser({
    user: "admin",
    pwd: "secure_password",
    roles: ["root"]
})

7.2 角色管理

操作 命令 说明
创建自定义角色 db.createRole({role: "role_name", privileges: […], roles: […]}) 定义细粒度权限
查看角色 db.getRole("role_name") 查看角色详细信息
查看所有角色 db.getRoles() 列出当前数据库所有角色
更新角色 db.updateRole("role_name", {privileges: […]}) 修改角色权限
授予角色 db.grantRolesToUser("username", [{role: "role_name", db: "db_name"}]) 给用户授予角色
撤销角色 db.revokeRolesFromUser("username", [{role: "role_name", db: "db_name"}]) 撤销用户的角色
删除角色 db.dropRole("role_name") 删除自定义角色

7.3 常用内置角色

角色 级别 说明
root 全局 超级管理员,所有操作权限
read 数据库 只读权限
readWrite 数据库 读写权限
dbAdmin 数据库 数据库管理(索引、统计等)
userAdmin 数据库 用户管理权限
dbOwner 数据库 数据库所有者(readWrite+dbAdmin+userAdmin)
clusterAdmin 集群 集群管理权限
clusterManager 集群 集群监控管理
clusterMonitor 集群 集群只读监控
backup 集群 备份权限
restore 集群 恢复权限
readAnyDatabase 全局 所有数据库只读
readWriteAnyDatabase 全局 所有数据库读写
userAdminAnyDatabase 全局 所有数据库用户管理
dbAdminAnyDatabase 全局 所有数据库管理

cover: 附件/Halo封面/database.jpg

八、副本集管理命令

8.1 副本集初始化与配置

操作 命令 说明
初始化副本集 rs.initiate() 初始化新的副本集
初始化指定配置 rs.initiate({_id: "rs0", members: [{_id: 0, host: "host:port"}]}) 带配置初始化
查看副本集配置 rs.conf() 返回副本集配置文档
重新配置 rs.reconfig(config) 应用新的副本集配置
查看副本集状态 rs.status() 返回副本集状态信息
查看主节点状态 rs.printReplicationInfo() 从主节点角度查看状态
查看从节点状态 rs.printSlaveReplicationInfo() 查看从节点同步状态

8.2 副本集成员管理

操作 命令 说明
添加成员 rs.add("host:port") 向副本集添加新成员
添加仲裁节点 rs.addArb("host:port") 添加只参与投票的仲裁节点
移除成员 rs.remove("host:port") 从副本集移除成员
降级主节点 rs.stepDown() 强制主节点降级为从节点
冻结节点 rs.freeze(seconds) 阻止节点在一定时间内成为主节点
设置同步源 rs.syncFrom("host:port") 手动设置从节点的同步源
重新同步 db.adminCommand({resync: 1}) 强制从节点重新同步数据

8.3 副本集状态命令

操作 命令 说明
检查当前节点角色 db.isMaster() 或 rs.isMaster() 返回节点角色信息
查看oplog信息 db.getReplicationInfo() 查看oplog大小和时间范围
查看从节点信息 db.printSlaveReplicationInfo() 查看所有从节点同步状态
强制选举 rs.stepDown() 或 db.adminCommand({replSetStepDown: 60}) 触发新选举

cover: 附件/Halo封面/database.jpg

九、分片集群管理命令

操作 命令 说明
添加分片 sh.addShard("rs0/host:port") 向集群添加分片
查看分片状态 sh.status() 查看分片集群状态
启用数据库分片 sh.enableSharding("<database>") 对数据库启用分片
分片集合 sh.shardCollection("<db>.<collection>", {shard_key: 1}) 对集合进行分片
添加标签 sh.addShardTag("shard_name", "tag") 为分片添加标签
查看均衡器状态 sh.getBalancerState() 查看均衡器是否开启
开启/关闭均衡器 sh.startBalancer() / sh.stopBalancer() 控制数据均衡
移动数据块 sh.moveChunk("<db>.<collection>", {shard_key: value}, "target_shard") 手动迁移数据块

cover: 附件/Halo封面/database.jpg

十、备份与恢复命令

10.1 mongodump / mongorestore

操作 命令 说明
备份所有数据库 mongodump --out /backup/path 导出所有数据库
备份指定数据库 mongodump --db <db_name> --out /backup/path 导出指定数据库
备份指定集合 mongodump --db <db_name> --collection <coll_name> --out /backup/path 导出指定集合
带认证备份 mongodump -u <user> -p <password> --authenticationDatabase admin --out /backup/path 认证后备份
压缩备份 mongodump --gzip --archive=backup.gz 压缩格式备份
恢复所有数据库 mongorestore /backup/path 恢复所有数据库
恢复指定数据库 mongorestore --db <db_name> /backup/path/<db_name> 恢复指定数据库
恢复指定集合 mongorestore --db <db_name> --collection <coll_name> /backup/path/file.bson 恢复指定集合
带认证恢复 mongorestore -u <user> -p <password> --authenticationDatabase admin /backup/path 认证后恢复
从压缩文件恢复 mongorestore --gzip --archive=backup.gz 从压缩文件恢复

10.2 mongoexport / mongoimport

操作 命令 说明
导出为JSON mongoexport --db <db_name> --collection <coll_name> --out file.json 导出为JSON格式
导出为CSV mongoexport --db <db_name> --collection <coll_name> --type=csv --fields field1,field2 --out file.csv 导出为CSV格式
带查询导出 mongoexport --db <db_name> --collection <coll_name> --query '{field: value}' --out file.json 按条件导出
导入JSON mongoimport --db <db_name> --collection <coll_name> --file file.json 导入JSON文件
导入CSV mongoimport --db <db_name> --collection <coll_name> --type=csv --headerline --file file.csv 导入CSV文件
批量导入 mongoimport --db <db_name> --collection <coll_name> --file file.json --numInsertionWorkers 4 多线程导入

cover: 附件/Halo封面/database.jpg

十一、性能监控与诊断命令

11.1 性能监控

操作 命令 说明
查看当前操作 db.currentOp() 查看正在执行的操作
终止操作 db.killOp(opid) 终止指定操作
查看慢查询 db.getProfilingStatus() 查看性能分析器状态
设置性能分析级别 db.setProfilingLevel(level, slowms) 0-关闭,1-只记录慢查询,2-记录所有操作
查看慢查询日志 db.system.profile.find().pretty() 查询性能分析记录
查看集合统计 db.<collection>.stats() 返回集合的详细统计
查看数据库统计 db.stats() 返回数据库统计信息
查看服务器状态 db.serverStatus() 返回服务器运行状态

11.2 诊断命令

操作 命令 说明
查看锁信息 db.serverStatus().locks 查看锁状态
查看连接数 db.serverStatus().connections 查看当前连接数
查看内存使用 db.serverStatus().mem 查看内存使用情况
查看网络统计 db.serverStatus().network 查看网络流量统计
查看oplog统计 db.getReplicationInfo() 查看oplog信息
查看存储引擎统计 db.serverStatus().wiredTiger WiredTiger引擎统计
诊断数据库 db.runCommand({dbStats: 1, scale: 1024}) 获取数据库统计(KB单位)
验证集合 db.<collection>.validate({full: true}) 完整验证集合数据

cover: 附件/Halo封面/database.jpg

十二、数据类型速查

类型 说明 示例
String 字符串 "hello"
Integer 32位整数 NumberInt(100)
Long 64位整数 NumberLong("10000000000")
Double 双精度浮点数 100.5
Boolean 布尔值 true / false
ObjectId 自动生成的主键 ObjectId("507f1f77bcf86cd799439011")
ISODate 日期时间 ISODate("2024-01-01T00:00:00Z")
Timestamp 时间戳 Timestamp(1234567890, 1)
Array 数组 ["a", "b", "c"]
Object 嵌套文档 {name: "张三", age: 25}
Null 空值 null
Binary Data 二进制数据 BinData(0, "base64string")
Regular Expression 正则表达式 /{regex}/
JavaScript JavaScript代码 function() {…}
Decimal128 高精度小数 NumberDecimal("100.55")
MinKey / MaxKey 最小/最大值 MinKey / MaxKey
原创

MongoDB 命令大全

本文链接: MongoDB 命令大全

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录