Mongo常用命令
1367 字
7 分钟
Mongo常用命令
MongoDB 常用命令
目录
一、基本概念
| 术语 | 说明 | 类比 SQL |
|---|---|---|
| 数据库 (Database) | 集合的容器 | 数据库 |
| 集合 (Collection) | 数据库中的一组文档 | 表 (Table) |
| 文档 (Document) | 集合中的一条记录 | 行 (Row) |
| 字段 (Field) | 文档中的键值对 | 列 (Column) |
注意:MongoDB 的文档不需要有相同的结构(Schema-less),且一个字段可以是 JSON 对象或数组。
二、mongosh 基本命令
mongosh # 打开连接到本地实例的 MongoShellshow databases / show dbs # 显示所有数据库use <dbname> # 切换到指定数据库db # 显示当前使用的数据库名称cls # 清屏show collections # 显示当前数据库中的所有集合db.dropDatabase() # 删除当前数据库exit # 退出 mongosh 会话三、安装
Linux
YUM (CentOS/RHEL)
sudo yum install -y mongodb-orgAPT (Debian/Ubuntu)
sudo apt-get updatesudo apt-get install -y mongodb-orgDNF (Fedora)
sudo dnf install mongodb-org四、数据库和集合CRUD 操作
4.1 数据库
| 命令 | 说明 | 示例 |
|---|---|---|
| use <数据库名> | 切换数据库,若数据库不存在,不会立即创建,仅切换上下文 | use pi |
| db | 显示当前数据库 | db |
| show dbs | 显示所有数据库 |
4.2 集合
| 命令 | 说明 | 示例 |
|---|---|---|
| db.createCollection(name, options) | 创建集合 | db.createCollection(“users”) |
- 创建带选项的集合,options可以是如下参数
| 参数名 | 类型 | 描述 | 示例值 |
|---|---|---|---|
| capped | 布尔值 | 是否创建一个固定大小的集合 | true |
| size | 数值 | 集合的最大大小(以字节为单位)。仅在capped为true时有效 | 104857600 (10MB) |
| max | 数值 | 集合中允许的最大文档数。仅在capped为true时有效 | 5000 |
| validator | 对象 | 用于文档验证的表达式 | { $jsonSchema: { … }} |
| validationLevel | 字符串 | 指定文档验证的严格程度。"off":不进行验证。"strict":插入和更新操作都必须通过验证(默认)。"moderate":仅现有文档更新时必须通过验证,插入新文档时不需要。 | “strict” |
| validationAction | 字符串 | 指定文档验证失败时的操作。"error"<阻止插入或更新>阻止插入或更新>(默认)。"warn"<允许插入或更新>允许插入或更新>,但会发出警告。 | “error” |
| strageEngine | 对象 | 为集合指定存储引擎配置。 | {wiredTiger:{…}} |
| colllation | 对象 | 指定集合的默认排序规则。 | {locale:“en”, strength<2>2>} |
4.2 创建 / 插入 (Create)
| 命令 | 说明 | 示例 |
|---|---|---|
insertOne | 插入单个文档 | db.users.insertOne({name: "张三"}) |
insertMany | 插入多个文档 | db.users.insertMany([{name: "李四"}, {name: "王五"}]) |
4.3 查询 / 查找 (Read)
| 命令 | 说明 | 示例 |
|---|---|---|
find() | 查询所有文档 | db.users.find() |
find(<filter>) | 按条件查询 | db.users.find({name: "老杨"}) |
find(<filter>, <projection>) | 按条件查询并指定返回字段 | db.users.find({name: "老杨"}, {name: 1, email: 1}) |
findOne(<filter>) | 查询满足条件的第一个文档 | db.users.findOne({level: 1}) |
countDocuments() | 返回满足条件的记录数量 | db.users.countDocuments({age: {$gte: 18}}) |
查询修饰符
| 命令 | 说明 |
|---|---|
sort() | 按指定字段升序(1)或降序(-1)排序 |
limit() | 限定返回文档数量 |
skip() | 跳过指定数量的文档 |
// 示例:按年龄降序排列,跳过前10条,返回5条db.users.find().sort({age: -1}).skip(10).limit(5)4.3 更新 (Update)
| 命令 | 说明 | 示例 |
|---|---|---|
updateOne | 更新满足条件的第一个文档 | db.users.updateOne({name: "张三"}, {$set: {age: 20}}) |
updateMany | 更新满足条件的所有文档 | db.users.updateMany({status: "pending"}, {$set: {status: "active"}}) |
replaceOne | 替换满足条件的第一个文档 | db.users.replaceOne({name: "张三"}, {name: "张三", age: 21}) |
save | 传入文档替换已有文档或插入新文档 | db.users.save({_id: ObjectId("..."), name: "张三"}) |
更新操作符
| 操作符 | 说明 | 示例 |
|---|---|---|
$set | 只更新指定字段,不影响其他字段 | {$set: {age: 25}} |
$inc | 递增(或递减)指定字段值 | {$inc: {age: 1}} |
$rename | 更新字段名称 | {$rename: {oldName: "newName"}} |
$unset | 删除一个字段 | {$unset: {age: ""}} |
$push | 将值加入数组(不判断重复) | {$push: {tags: "mongodb"}} |
$pull | 将值从数组中移除 | {$pull: {tags: "mongodb"}} |
$addToSet | 将值加入数组(若重复则不加入) | {$addToSet: {tags: "mongodb"}} |
4.4 删除 (Delete)
| 命令 | 说明 | 示例 |
|---|---|---|
deleteOne | 删除满足条件的第一个文档 | db.users.deleteOne({name: "张三"}) |
deleteMany | 删除满足条件的所有文档 | db.users.deleteMany({status: "inactive"}) |
五、聚合操作 (Aggregation)
聚合主要用于处理数据并返回计算结果(如求和、平均值等)。
| 操作符 | 说明 |
|---|---|
$sum | 计算总和 |
$avg | 计算平均值 |
$min | 获取最小值 |
$max | 获取最大值 |
$push | 将值加入数组(不判断重复) |
$first | 获取第一个文档数据 |
$last | 获取最后一个文档数据 |
// 示例:按部门分组统计平均工资db.employees.aggregate([ { $group: { _id: "$department", avgSalary: { $avg: "$salary" } } }])六、过滤条件 / 查询操作符
6.1 比较操作符
| 操作符 | 全称 | 说明 | 示例 |
|---|---|---|---|
$eq | equal | 等于 | {age: {$eq: 18}} |
$ne | not equal | 不等于 | {age: {$ne: 18}} |
$gt | greater than | 大于 | {age: {$gt: 18}} |
$gte | greater than or equal to | 大于等于 | {age: {$gte: 18}} |
$lt | less than | 小于 | {age: {$lt: 18}} |
$lte | less than or equal to | 小于等于 | {age: {$lte: 18}} |
$in | in | 值在指定列表中 | {status: {$in: ["active", "pending"]}} |
$nin | not in | 值不在指定列表中 | {status: {$nin: ["deleted", "banned"]}} |
6.2 逻辑操作符
| 操作符 | 说明 | 示例 |
|---|---|---|
$and | 并且(多个条件均为真) | {$and: [{age: {$gte: 18}}, {status: "active"}]} |
$or | 或者(至少一个条件为真) | {$or: [{status: "active"}, {status: "pending"}]} |
$not | 取反 | {age: {$not: {$lt: 18}}} |
6.3 其他操作符
| 操作符 | 说明 | 示例 |
|---|---|---|
$exists | 检查字段是否存在 | {email: {$exists: true}} |
$expr | 在不同字段之间做比较 | {$expr: {$gt: ["$spent", "$budget"]}} |
七、常用查询示例
// 查询年龄大于18且状态为active的用户db.users.find({ $and: [ {age: {$gt: 18}}, {status: "active"} ]})
// 查询状态为 active 或 pending 的用户db.users.find({ status: {$in: ["active", "pending"]}})
// 查询所有有 email 字段的用户db.users.find({ email: {$exists: true}})
// 查询花费超过预算的订单db.orders.find({ $expr: {$gt: ["$spent", "$budget"]}})支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!





















