MongoDB Shell是一个交互式工具,让你能用命令行直接和MongoDB数据库“对话”。它基于JavaScript语法,上手简单,特别适合初学者熟悉数据库的基本操作。
一、什么是MongoDB Shell?¶
MongoDB Shell(简称mongo)是MongoDB官方提供的命令行环境,你可以在这里执行创建、查询、修改、删除数据等操作。它让你无需图形界面,就能高效管理数据库,尤其适合Linux/Windows/Mac系统。
二、安装与启动MongoDB Shell¶
- 安装MongoDB:先确保你已安装MongoDB(官网可下载安装包)。安装完成后,Shell会随MongoDB一起安装。
- 启动Shell:打开终端/命令提示符,输入
mongo即可进入Shell环境。
- 成功启动后,你会看到类似以下提示:
MongoDB shell version v6.0.0
connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000
Implicit session: session { "id" : UUID("...") }
MongoDB server version: 6.0.0
>
- 这里的
>就是Shell的命令提示符,接下来可以输入命令了!
三、基础操作:连接与切换数据库¶
MongoDB的数据库操作基于“当前数据库”,用use命令切换。
- 查看当前数据库:输入db,会显示当前操作的数据库(默认是test)。
> db
test
- 切换数据库:用
use 数据库名切换,例如切换到myDB(若不存在,插入数据时会自动创建)。
> use myDB
switched to db myDB
> db
myDB
- 连接远程数据库:如果数据库在远程服务器,用
mongo --host 远程IP --port 端口号连接(默认端口27017)。
四、创建数据:插入文档到集合¶
MongoDB中,文档(类似JSON)是最小数据单元,集合(类似关系型数据库的“表”)是文档的容器。
- 自动创建集合:无需提前创建集合,插入数据时会自动生成。例如,向students集合插入一条文档:
> db.students.insertOne({name: "小明", age: 18, major: "计算机"})
{
"acknowledged" : true,
"insertedId" : ObjectId("650a1b2c3d4e5f6a7b8c9d0e"),
"insertedCount" : 1
}
insertOne():插入单条文档;insertMany():插入多条(例如db.students.insertMany([{...}, {...}]))。- 插入后,MongoDB自动为每条文档生成唯一的
_id(如ObjectId("...")),无需手动设置。
五、读取数据:查询文档¶
用find()方法查询集合数据,搭配pretty()格式化输出更易读。
- 查询所有文档:db.集合名.find().pretty()
> db.students.find().pretty()
{
"_id" : ObjectId("650a1b2c3d4e5f6a7b8c9d0e"),
"name" : "小明",
"age" : 18,
"major" : "计算机"
}
- 带条件查询:给
find()加过滤条件,例如查询年龄18的学生:
> db.students.find({age: 18}).pretty()
{
"_id" : ObjectId("650a1b2c3d4e5f6a7b8c9d0e"),
"name" : "小明",
"age" : 18,
"major" : "计算机"
}
- 查询单条数据:用
findOne()快速获取第一条匹配结果:
> db.students.findOne({name: "小明"})
{
"_id" : ObjectId("650a1b2c3d4e5f6a7b8c9d0e"),
"name" : "小明",
"age" : 18,
"major" : "计算机"
}
六、更新数据:修改文档¶
用updateOne()(更新一条)或updateMany()(更新多条),结合$set操作符修改字段。
- 更新单条数据:例如把小明的年龄改为20:
> db.students.updateOne(
{name: "小明"}, // 匹配条件
{$set: {age: 20}} // 更新操作
)
{
"acknowledged" : true,
"matchedCount" : 1,
"modifiedCount" : 1
}
- 结果说明:
matchedCount=1表示找到1条匹配数据,modifiedCount=1表示成功更新1条。 - 更新多条数据:把所有年龄大于18的学生年龄+1:
> db.students.updateMany(
{age: {$gt: 18}}, // 条件:年龄>18
{$inc: {age: 1}} // $inc是自增1
)
七、删除数据:移除文档¶
用deleteOne()(删一条)或deleteMany()(删多条)。
- 删除单条数据:删除年龄20的学生:
> db.students.deleteOne({age: 20})
{
"acknowledged" : true,
"deletedCount" : 1
}
- 删除全部数据:清空
students集合(谨慎使用!):
> db.students.deleteMany({})
{
"acknowledged" : true,
"deletedCount" : 5 // 假设集合有5条数据
}
八、管理数据库与集合¶
- 查看所有数据库:
show dbs(显示所有已存在的数据库,注意:空数据库不会显示)。 - 删除当前数据库:先切换到目标数据库,再执行
db.dropDatabase():
> use myDB
switched to db myDB
> db.dropDatabase()
{ "dropped" : "myDB", "ok" : 1 }
- 删除集合:
db.集合名.drop(),例如删除students集合:
> db.students.drop()
true // 返回true表示删除成功
九、进阶小技巧¶
- 统计文档数量:
db.集合名.countDocuments()
> db.books.countDocuments({author: "小明"}) // 统计作者是小明的书的数量
- 限制查询结果:用
limit()只取前N条:
> db.books.find().limit(3).pretty() // 只返回前3条数据
十、学习建议¶
- 多动手实践:跟着示例输入命令,尝试插入、查询、更新不同数据。
- 查阅官方文档:MongoDB Shell支持完整的JavaScript语法,遇到复杂操作可参考官方手册。
- 从简单到复杂:先掌握CRUD基础,再学习聚合查询、索引等进阶内容。
MongoDB Shell的魅力在于“零配置”——无需提前创建数据库/表,插入数据即生效。通过命令行快速试错,是入门MongoDB最直接的方式。现在,打开你的终端,开始体验用代码“玩转”数据库吧!