当前位置:网站首页>《MongoDB入门教程》第04篇 MongoDB客户端
《MongoDB入门教程》第04篇 MongoDB客户端
2022-07-05 15:34:00 【不剪发的Tony老师】
本篇我们介绍 MongoDB 客户端工具 mongo 的使用。
mongo shell
mongo shell 是一个用于连接 MongoDB 的交互式 JavaScript 接口。mongo shell 可以用于操作 MongoDB 中的数据,也可以执行一些管理任务。
mongo shell 类似于 MySQL 数据库客户端 mysql,PostgreSQL 客户端 psql,或者 Oracle 数据库中的 SQL*Plus 工具。
注意,MongoDB v5.0 开始默认弃用了随着 MongoDB 一起安装的 mongo shell,推荐使用新的 mongsh。
在使用 mongo shell 之前,我们需要下载并安装该工具。
安装完成之后,在命令行中输入以下命令:
mongosh
mongo shell 会自动连接到本地(localhosr)默认端口(27017)上的 MongoDB 服务。
mongo shell 即可以作为一个功能完备的 JavaScript 解释器,也可以作为一个 MongoDB 客户端工具。
JavaScript 解释器
mongo shell 是一个功能完备的 JavaScript 解释器,所以我们可以用它执行 JavaScript 代码。例如:
> Math.max(10,20,30);
30
mongo shell 允许输入跨行命令,当我们输入回车时它会检测 JavaScript 语句是否完整。如果语句不完整,我们可以在下一行继续输入:
> function add(a, b) {
... return a + b;
... }
> add(10,20);
30
输入 console.clear() 命令可以清空屏幕:
console.clear()
MongoDB 客户端
mongo shell 是一个 MongoDB 客户端。默认情况下,它会连接本地 MongoDB 服务中的 test 数据库,并且将数据库连接设置为全局变量 db。
db 变量可以用于查看当前数据库:
> db
test
除了 JavaScript 语法之外,mongosh 还提供了很多方便我们与 MongoDB 数据库服务器交换的命令。例如,shows dbs 命令可以列出服务中的全部数据库:
test> show dbs
admin 41 kB
config 73.7 kB
local 81.9 kB
以上输出结果显示了 3 个数据库。
如果想要切换当前数据库,可以使用 use 命令。例如,以下命令可以将当前数据库切换为 bookdb 数据库:
test> use bookdb
switched to db bookdb
注意,我们可以切换到一个不存在的数据库。此时,当我们第一次保存数据时,MongoDB 会自动创建这个数据库。
执行以上命令之后,变量 db 的值为 bookdb:
> db
bookdb
此时,我们可以通过变量 db 访问数据库 bookdb 中的集合 books:
> db.books
bookdb.books
基本的 CRUD 操作
下面我们演示一下如何创建(Create)、读取(Read)、更新(Update)以及删除(Delete)文档。这些操作也被称为 CRUD。
本文只涉及简单的 CRUD 操作,我们将会在后续教程中学习详细的 CRUD 操作。
创建文档
如果想要在集合中创建一个新的文档,可以使用 insertOne() 方法。
以下命令为集合 books 增加了一个新的文档(一本新书):
db.books.insertOne({
title: "SQL编程思想",
published_year: 2021
})
输出结果如下:
{
"acknowledged" : true,
"insertedId" : ObjectId("62bb0962874071c64b1f9b7b")
}
当我们输入回车时,mongo shell 会将命令发送到 MongoDB 服务器。如果命令有效,MongoDB 会插入文档并返回结果。
以上示例中,返回对象包含两个键:acknowledged 和 insertedId。insertedId 的值就是文档的 _id 字段。
如果我们增加文档时没有指定 _id 字段,MongoDB 会自动为文档指定一个唯一的 ObjectId 作为 _id 字段的值。
MongoDB 使用 _id 字段唯一标识集合中的文档。
查找文档
如果想要查找集合中的文档,可以使用 findOne() 方法。例如:
db.books.findOne()
输出结果如下;
{
_id: ObjectId("62bb0962874071c64b1f9b7b"),
title: 'SQL编程思想',
published_year: 2021
}
pretty() 方法可以将输出结果进行格式化显示,例如:
db.books.find().pretty()
{
"_id" : ObjectId("62bb0962874071c64b1f9b7b"),
"title" : "SQL编程思想",
"published_year" : 2021
}
更新文档
如果想要更新某个文档中的内容,可以使用 updateOne() 方法。该方法至少需要提供两个参数:
- 第一个参数指定了需要更新的文档。
- 第二个参数指定了更新操作的内容。
以下示例更新了标题为“SQL编程思想”的文档的 published_year 字段:
db.books.updateOne(
{
title: "SQL编程思想"},
{
$set: {
published_year: 2022 }}
)
其中,第一个参数表示更新标题为“SQL编程思想”的第一个文档。第二个参数使用 $set 操作符更新字段 published_year 的值。返回结果如下:
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
删除文档
如果想要删除集合中的某个文档,可以使用 deleteOne() 方法。该方法包含一个参数,用于指定要删除的文档。
以下示例使用 deleteOne() 方法删除集合 books 中标题为“SQL编程思想”的第一个文档:
db.books.deleteOne({
title: "SQL编程思想"});
输出结果如下:
{
"acknowledged": true,
"deletedCount": 1
}
返回结果中的 deletedCount 表示成功删除了一个文档。
如果想要查看当前数据库中的所有集合,可以使用 show collections 命令:
show collections
books
数据库 bookdb 中目前只包含一个集合。
边栏推荐
- I'm fat, huh
- ES6深入—async 函数 与 Symbol 类型
- Data communication foundation smart_ Link_&_ Monitor_ Link
- list集合根据对象某属性求和,最大值等
- wyt 。。
- Data communication foundation - routing communication between VLANs
- 项目中批量update
- Information collection of penetration test
- Arduino控制微小的六足3D打印机器人
- The list set is summed up according to a certain attribute of the object, the maximum value, etc
猜你喜欢
Detailed explanation of C language branch statements
【简记】解决IDE golang 代码飘红报错
MySQL overview
Arduino controls a tiny hexapod 3D printing robot
Which keywords will conflict with the abstract keyword
Data communication foundation OSPF Foundation
[Netease Yunxin] research and practice of super-resolution technology in the field of real-time audio and video
CODING DevSecOps 助力金融企业跑出数字加速度
18.[STM32]读取DS18B20温度传感器的ROM并实现多点测量温度
Batch update in the project
随机推荐
vant tabbar遮挡内容的解决方式
Analytic hierarchy process of mathematical modeling (including Matlab code)
MySQL overview
The difference between abstract classes and interfaces
How to introduce devsecops into enterprises?
项目sql中批量update的时候参数类型设置错误
21.[STM32]I2C协议弄不懂,深挖时序图带你编写底层驱动
CISP-PTE之SQL注入(二次注入的应用)
String modification problem solving Report
Memo 00
Research and practice of super-resolution technology in the field of real-time audio and video
Appium automation test foundation - appium basic operation API (II)
Record the pits encountered in the raspberry pie construction environment...
Advanced level of static and extern
20.[STM32]利用超声波模块和舵机实现智能垃圾桶功能
DataArts Studio数据架构——数据标准介绍
数学建模之层次分析法(含MATLAB代码)
Noi / 1.5 37: mercenaries
lv_ font_ Conv offline conversion
一文带你吃透js处理树状结构数据的增删改查