一、连接与基础入门
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 |