MongoDB增删改查学习记录
NoSQL
NoSQL,指的是非关系型的数据库。而我们平时说的关系型数据库,就是SQL,NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储;比如大数据。
而我们MongoDB就是属于非关系型的数据库。
什么是MongoDB
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB将数据存储为一个文档,数据结构由键值对组成,类似于JSON格式,字段值可以包含其他文档、数组以及文档数组。
nosql 与 sql 的区别:
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接/MongoDB不支持 | |
primary key | primary key | 主键/MongoDB自动将_id字段设置为主键 |
简单来说:
SQL: 数据库 -> 数据表 -> 数据记录行 -> 数据字段 等等…
NoSQL:数据库 -> 集合 -> 文档 等等…
数据库
一个 mongodb 中可以建立多个数据库
MongoDB 的默认数据库为
db
,该数据库存储在 data 目录中。MongoDB 的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限。
show dbs
命令可以显示所有数据的列表执行 db 命令可以显示当前数据库对象或集合
运行 use 命令可以连接到一个指定的数据库
使用Linux部署MongoDB
下载二进制包
Linux 二进制文件下载地址:https://www.mongodb.com/try/download/community
这里学习将 MongoDB 4.2.24 安装在 Ubuntu 操作系统中进行演示。
1 | # 进入到相应目录 |
解压tar包
1 | # 解压tar包 |
创建相应目录
1 | # 在 /usr/local 目录下创建mongodb目录 |
移除相应目录
将解压后的 mongodb-linux-x86_64-ubuntu1804-4.2.24 中的所有文件全部移动到 /usr/local/mongodb 中
注意 /*
是所有子文件
1 | mv /usr/local/mongodb-linux-x86_64-ubuntu1804-4.2.24/* /usr/local/mongodb/ |
删除无用的tar包:
1 | rm -rf /usr/local/mongodb-linux-x86_64-ubuntu1804-4.2.24.tgz |
设置MongoDB环境变量
也可以不用设置环境变量进行启动,但是不设置环境变量启动的话要每次启动写很多启动参数,比较麻烦,所以做好配置环境变量。
不配置环境变量的启动如下(不建议):
1 | cd /usr/local/mongodb/bin |
配置环境变量的启动:(建议)
1 | vim /etc/profile |
添加MongoDB配置文件
1 | vim /etc/mongodb.conf |
1 | #指定数据库路径 |
MongoDB的启动与停止
启动MongoDB (-f 使用配置文件方式启动)
1 | mongod -f /etc/mongodb.conf |
关闭 MongoDB(-f 使用配置文件方式关闭 )
1 | mongod --shutdown -f /etc/mongodb.conf |
查看进程:
1 | ps -ef | grep mongod |
也可以杀死进程来关闭: kill -9 1527473(进程号)进行关闭。
MongoDB常用语法
进入到MongoDB命令行:
1 | mongo |
列出当前所有数据库:
1 | show dbs; # show databases; 也可以 但是不太建议 |
进入到某个数据库:
1 | use Database_name; |
创建一个数据库:
1 | # 当前use了一个不存在的数据库时,这里会自动创建该数据库(前提需要在库中插入集合) |
例如:
查看某个库下的所有集合
1 | show tables; # 或使用 show collection 某些版本不支持该命令 |
创建一个集合
MongoDB 中使用 createCollection() 方法来创建集合。
语法格式:
1 | db.createCollection(name, options) |
参数说明:
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔值 | 是否启用集合限制,如果开启需要制定一个限制条件,默认为不启用 |
size | 布尔值 | 限制集合使用空间的大小,默认为没有限制 |
max | 布尔值 | 集合中最大条数限制,默认为没有限制 |
autoIndexId | 布尔值 | 是否使用_id作为索引,默认为使用(true或false) |
例如:创建一个名为 users
的结合:
1 | db.createCollection('users'); |
在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
在集合中插入数据:
语法格式:
1 | db.集合名称.insert({数据}) |
示例:在users表中插入 "name":"xiaoming","age":19,"register_date":"2023-10-31"
1 | db.users.insert({"name":"xiaoming","age":19,"register_date":"2023-10-31"}); |
查看集合中的数据:
1 | # 语法: |
更新集合中的文档:
MongoDB 中使用 update() 方法来创建集合。
语法格式:
1 | db.集合名称.update({k:v},{$set:{new_key:new_value}}) |
示例一:将 key 为 name,value 值为 xiao3,修改为:小三
1 | db.info.update({"name":"xiao3"},{$set:{"name":"小三"}}); |
示例二:将 key 为 name, value 值为 xiao2 这个记录的 key为 age 值修改为18。
1 | db.info.update({"name":"xiao2"},{$set:{"name":"小二","age":18}}); |
删除文档:
MongoDB 中使用 remove() 方法来删除文档。
语法格式:
1 | db.集合名称.remove({k:v}); |
示例:删除 name 值为 xiao三的文档(默认会匹配所有):
1 | db.info.remove({"name":"小三"}); |
示例二:删除 name 值为 小二的第一个匹配的文档:
1 | db.info.remove({"name":"小三"},{justOne:true}); |
删除集合:
MongoDB 中使用 drop() 方法来删除集合。
语法格式:
1 | db.集合名称.drop(); |
示例: 删除名为users的集合
1 | db.users.drop(); |
删除数据库:
1 | # 删除数据库需要use到某个数据库下执行。 |
例如:删除 information
数据库:
mongoimport 导入数据
准备如下 JSON 数据,将其保存为 test.json
1 | {"name":"xiao1","age":1}{"name":"xiao2","age":2}{"name":"xiao3","age":3}{"name":"xiao4","age":4}{"name":"xiao5","age":5}{"name":"xiao6","age":6}{"name":"xiao7","age":8}{"name":"xiao9","age":9}{"name":"xiao10","age":10}{"name":"xiao11","age":11}{"name":"xiao12","age":12}{"name":"xiao13","age":13}{"name":"xiao14","age":14}{"name":"xiao15","age":15}{"name":"xiao16","age":16}{"name":"xiao17","age":17}{"name":"xiao18","age":18}{"name":"xiao19","age":19}{"name":"xiao20","age":20} |
使用 mongoimport
工具,将其导入到 MongoDB test
库下的 info
集合中:
1 | mongoimport --db test --collection info --drop --file test.json |
将其导入到 MongoDB 数据库,方便后续的查询操作。
MongoDB查询文档
基础知识
MongoDB 查询文档使用 find()
方法。
find()
方法以非结构化的方式来显示所有文档。
语法:
MongoDB 查询数据的语法格式如下:
1 | db.collectionName.find(query, projection) |
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty()
方法,语法格式如下:
除了 find()
方法之外,还有一个 findOne()
方法,它只返回一个文档。
find条件查询
1 | ######## 其中collectionName表示集合的名称 |
MongoDB与RDBMS where 语句比较
操作 | 格式 | 范例 | RDBMS 中的类似语句 |
---|---|---|---|
等于 | {<key>:<value>} |
db.love.find({“name”:”whoami”}).pretty() | where name = ‘whoami’ |
小于 | {<key>:{$lt:<value>}} |
db.love.find({“age”:{$lt:19}}).pretty() | where age < 19 |
小于或等于 | {<key>:{$lte:<value>}} |
db.love.find({“age”:{$lte:19}}).pretty() | where likes <= 19 |
大于 | {<key>:{$gt:<value>}} |
db.love.find({“age”:{$gt:19}}).pretty() | where likes > 19 |
大于或等于 | {<key>:{$gte:<value>}} |
db.love.find({“age”:{$gte:19}}).pretty() | where likes >= 19 |
不等于 | {<key>:{$ne:<value>}} |
db.love.find({“age”:{$ne:19}}).pretty() | where likes != 19 |
MongoDB 官方文档地址:
https://www.mongodb.com/docs/manual/
菜鸟教程地址: