0%

Mongo使用shell操作

MongoDB Shell 操作指南:从数据库管理到文档操作

MongoDB 提供了交互式 Shell(mongo)工具,用于直接操作数据库。本文通过 Shell 可以执行数据库创建、用户管理、文档 CRUD 等操作,是日常管理和调试的重要工具。本文详细介绍 MongoDB Shell 的核心操作。

数据库基本操作

切换 / 创建数据库

使用 use 命令切换到指定数据库,若数据库不存在则自动创建(但需插入数据后才会显示):

1
use mydb  # 切换到mydb数据库,不存在则创建

查看所有数据库

1
show dbs  # 列出所有非空数据库(空数据库不显示)

查看当前数据库

1
db  # 输出当前所在数据库名称

删除当前数据库

1
db.dropDatabase()  # 谨慎操作!删除当前数据库所有数据

用户管理

MongoDB 通过角色权限控制访问,支持创建不同权限的用户(如管理员、读写用户等)。

创建用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 创建超级管理员(root角色)
db.createUser({
user: "root", # 用户名
pwd: "root123", # 密码
roles: ["root"] # 角色(root为超级权限)
})

# 创建自定义权限用户
db.createUser({
user: "appuser",
pwd: "app123",
roles: [
{ role: "readWrite", db: "mydb" }, # 对mydb数据库有读写权限
{ role: "read", db: "logdb" } # 对logdb数据库有只读权限
]
})

常用角色说明

角色类型 角色标识 说明
数据库用户角色 readreadWrite 分别对应只读、读写权限
数据库管理角色 dbAdmindbOwneruserAdmin 数据库管理、所有者、用户管理权限
集群管理角色 clusterAdminclusterMonitor 集群管理、监控权限
超级用户角色 root 所有数据库的最高权限

查看用户

1
show users  # 查看当前数据库下的所有用户

修改用户密码

1
db.updateUser("appuser", { pwd: "newapp123" })  # 修改appuser的密码

删除用户

1
db.dropUser("appuser")  # 删除当前数据库下的appuser用户

用户登录(认证)

1
db.auth("appuser", "app123")  # 认证成功返回1,失败返回0

集合(Collection)操作

集合类似关系型数据库的 “表”,无需预先创建,插入文档时会自动生成。

创建集合(可选)

1
db.createCollection("users")  # 显式创建users集合(通常无需手动创建)

查看集合

1
show collections  # 列出当前数据库的所有集合

删除集合

1
db.users.drop()  # 删除users集合(包含所有文档)

文档(Document)操作

文档是 MongoDB 的基本数据单元(类似 JSON 对象),以下是常用的 CRUD 操作。

插入文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 插入单条文档(_id可选,不指定则自动生成ObjectId)
db.users.insertOne({
_id: 1, # 自定义主键
name: "Alice",
age: 25,
email: "alice@example.com",
hobbies: ["reading", "hiking"]
})

# 插入多条文档
db.users.insertMany([
{ name: "Bob", age: 30, email: "bob@example.com" },
{ name: "Charlie", age: 35, email: "charlie@example.com" }
])

查询文档

(1)基本查询
1
2
db.users.find()  # 查询users集合所有文档(默认显示20条,按Enter加载更多)
db.users.find().pretty() # 格式化输出,便于阅读
(2)条件查询
操作符 说明 示例
$gt 大于 { age: { $gt: 25 } }
$gte 大于等于 { age: { $gte: 25 } }
$lt 小于 { age: { $lt: 30 } }
$lte 小于等于 { age: { $lte: 30 } }
$eq 等于 { name: { $eq: "Alice" } }{ name: "Alice" }
$ne 不等于 { age: { $ne: 25 } }
$in 在数组中 { hobbies: { $in: ["reading", "sports"] } }
$nin 不在数组中 { hobbies: { $nin: ["gaming"] } }

示例:

1
2
3
4
5
# 查询年龄25-30岁(含)的用户
db.users.find({ age: { $gte: 25, $lte: 30 } }).pretty()

# 查询爱好包含"reading"的用户
db.users.find({ hobbies: { $in: ["reading"] } })
(3)投影查询(只返回指定字段)
1
2
# 只返回name和age字段(_id默认显示,需显式关闭)
db.users.find({ age: { $gt: 25 } }, { name: 1, age: 1, _id: 0 })
(4)排序与分页
1
2
3
4
5
# 按年龄升序排序(1:升序,-1:降序)
db.users.find().sort({ age: 1 })

# 跳过前2条,取3条(分页)
db.users.find().skip(2).limit(3)

更新文档

(1)更新单条文档(updateOne
1
2
3
4
5
# 将name为"Alice"的文档,age改为26
db.users.updateOne(
{ name: "Alice" }, # 条件
{ $set: { age: 26, email: "alice.new@example.com" } } # 更新内容($set只更新指定字段)
)
(2)更新多条文档(updateMany
1
2
3
4
5
# 将所有age<30的用户,添加"young"标签
db.users.updateMany(
{ age: { $lt: 30 } },
{ $set: { tag: "young" } }
)
(3)替换文档(replaceOne
1
2
3
4
5
# 完全替换name为"Bob"的文档(保留_id,其他字段全替换)
db.users.replaceOne(
{ name: "Bob" },
{ name: "Bob", age: 31, email: "bob.updated@example.com", city: "Beijing" }
)
(4)更新选项(options
1
2
3
4
5
6
# 若不存在name为"Dave"的文档,则插入(upsert: true
db.users.updateOne(
{ name: "Dave" },
{ $set: { age: 40 } },
{ upsert: true }
)

删除文档

(1)删除单条文档(deleteOne
1
db.users.deleteOne({ name: "Charlie" })  # 删除name为"Charlie"的第一条文档
(2)删除多条文档(deleteMany
1
2
3
4
5
# 删除所有age>35的文档
db.users.deleteMany({ age: { $gt: 35 } })

# 删除集合所有文档(保留集合结构)
db.users.deleteMany({})

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10