三十八、MongoDB数据库(增删改查)

MongoDB简介

就是一个数据库,将数据存储在磁盘文件中

MongoDB下载:https://www.mongodb.com/download-center/community

数据库种类
关系型:MySQL、SQL Server 、Oracle等

非关系型(Not Only SQL):MongoDB(文档)、Redis/Memcache(内存)

关系型数据库和非关系型数据库(NoSQL)区别:
相同点:都是数据库

不同点:
关系型:
1.遵循SQL标准,换句话说增删改查语法大同小异、
2.有库和表约束等
非关系型:
1.没有标准、
2.一般键值对形式存储、
3. 读取速度更快

MongoDB存储方式

MongoDB是文档型数据库,文件以BSON格式存储在硬盘中。

注意:BSON是JSON的一种二进制形式的存储格式

小总结

什么是mongodb :就是一个数据库,磁盘文件(BSON 二进制JSON 底层是JS引擎)

mongodb能干吗:存放网站数据

MongoDB的安装与使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建MongoDB 服务
n 前 提:现在安装目录下创建data目录,用于后期存放数据

n 创建服务:bin/mongod.exe --install --dbpath 磁盘路径 --logpath 日志路径

n 删除服务:bin/mongod.exe --remove

n 启动服务:net start mongodb (注:service 服务名d restart/stop/start)

n 关闭服务:net stop mongodb
在这里插入图片描述
注意:此处打开cmd窗口输入bin/mongod.exe --install --dbpath 磁盘路径 --logpath 日志路径,一定要以管理员身份打开cmd,否则后面输入net start mongodb启动服务就会报错,还有安装的目录名及文件都不能有中文和空格,空格,空格,空格一定注意。

连接MongoDB服务器
语法:mongo.exe 服务器ip地址:端口/数据库 (注:默认test数据库)

简写:mongo.exe

MongoDB默认端口:27017
在这里插入图片描述
mongoDB每次使用都需进入 bin文件下下 操作麻烦

解决办法; 配置环境变量

此电脑 右键单击=> 属性 => 高级系统设置 => 环境变量
在这里插入图片描述

小总结

步骤1(安装):双击傻瓜式下一步

步骤2(创建服务)

  1. 用管理员身份运行DOS窗口
  2. 切换到安装目录/bin
  3. mongod.exe --install --dbpath 磁盘目录 --logpath 磁盘路径
  4. 去服务查看win+r 【services.msc】

步骤3(启动服务):net start mongodb

步骤4(登录):mongo

非win系统(Linux、mac)

Llinux

#步骤1:下载
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
#步骤2:解压
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz
#步骤3:将解压包拷贝到指定目录
mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb
#步骤4:创建数据存放目录与日志存放目录
mkdir -p /usr/local/mongodb/data /usr/local/mongodb/logs
#步骤5:启动MongoDB服务
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --logappend --port=27017 --fork
#后期登录即可
/usr/local/mongodb/bin/mongo

mac

步骤1:进入/usr/local
cd /usr/local
步骤2:下载
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.9.tgz
步骤3:解压
sudo tar -zxvf mongodb-osx-ssl-x86_64-4.0.9.tgz
#步骤4:重命名
sudo mv mongodb-osx-x86_64-4.0.9/ mongodb
#步骤5:创建数据存放目录与日志存放目录
sudo mkdir -p /usr/local/mongodb/data /usr/local/mongodb/logs
#步骤6:启动MongoDB服务
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --logappend --port=27017 --fork
#后期登录即可
/usr/local/mongodb/bin/mongo

Mongodb基本操作

Mongodb和Mysql的区别:

MySQL数据库中有:数据库(database)、表(table)、记录(row)
MongoDB数据库中有:数据库(database)、集合(collection)、文档(document)     JSON
----------------------------------------------------------------------------------------
MongoDB中的集合相当于MySQL中的表,但是集合没有列的限制,体现了模式自由。
MongoDB内部执行引擎为JS解释器,把文档存储成bson结构,在查询时,转换为JS对象,并可以通过熟悉的JS语法来操作。
db.xxx来操作

查看数据库

命令:show databases

在这里插入图片描述

选择数据库

命令:use 数据库名
效果
在这里插入图片描述
注意:如果被选择的数据库不存在,后期当该数据库有数据时,系统会自动创建出该数据库(隐式创建)

查看集合

命令:show collections
效果:
在这里插入图片描述
创建集合

命令:db.createCollection(‘集合名’)
效果
在这里插入图片描述
注意:创建集合相当于mysql创建表,mongoDB中的集合相当于mysql中的表

删除集合
命令:db.集合名.drop()
效果:
在这里插入图片描述

思考:如何删除数据库?

回答:1通过use语法选中数据库,2通过db.dropDatabase()删除数据库

小总结
数据库(查看、创建、选择、删除)

查看:show databases
创建:有单独的语法,但是忽略  隐式创建
选择:use 数据库名
删除:1通过use选中数据库,2通过db.dropDatabase()删除数据库

集合(查看、创建、删除)

查看:show collections
创建:db.createCollection('集合名')      多学一招:忽略  后期插入数据 隐式创建集合
删除:db.集合名.drop()

MongoDB数据增删改查(CURD !!!)

C增加数据

**命令:**db.集合名.insert(JSON数据)

**说明:**集合存在-则直接插入数据,集合不存在-隐式创建

**练习:**在test2数据库的c1集合中插入数据(姓名叫webopenfather年龄18岁)

use test2
db.c1.insert({uname:"webopenfather", age:18})

留心1:数据库和集合不存在都隐式创建
留心2:对象的键统一不加引号方便看,但是查看集合数据时系统会自动加
留心3:mongodb会给每条数据增加一个全球唯一的_id键 

在这里插入图片描述
多学一招:_id的组成
在这里插入图片描述
想要自定义ID,只需要给插入的JSON数据增加_id键即可覆盖(但实战强烈不推荐

db.c1.insert({_id:1, uname:“webopenfather”, age:18})
在这里插入图片描述
想要一次性插入多条记录,需要传递数据,数组中写一个个JSON数据即可

db.c1.insert([
    {uname:"z3", age:3},
    {uname:"z4", age:4},
    {uname:"w5", age:5}
])

含义:一次性插入3条数据到c1集合

在这里插入图片描述
如何快速插入10条数据?
回答:mongodb底层使用JS引擎实现的,所以支持部分js语法

因此:可以写for循环

for (var i=1; i<=10; i++) {
    print(i)
}

需求:在test2数据库c2集合中插入10条数据,分别为 a1 a2 ... a10
use test2
for (var i=1; i<=10; i++) {
    db.c2.insert({uanme: "a"+i, age: i})
}

在这里插入图片描述

R查看数据

**基础语法:**db.集合名.find(条件 [,查询的列])

条件
查询所有数据 {}或者不写
查询age=6的数据 {age:6}
既要age=6又要性别=男 {age:6,sex:‘男’}

查询的列(可选参数
不写 - 这查询全部列(字段
{age:1} 只显示age列(字段
{age:0} 除了age列(字段都显示
留心:不管你怎么写系统自定义的_id都会在

升级语法

db.集合名.find({键:值})   注:值不直接写
				 {运算符:值}
db.集合名.find({
	键:{运算符:值}
}) 
运算符作用
$gt大于
$gte大于等于
$lt小于
$lte小于等于
$ne不等于
$inin 留心:值就写[1,2,3,4]
$ninnot in

练习1:查询所有数据
在这里插入图片描述
练习2:查询年龄大于5岁的数据?
在这里插入图片描述
练习3:查询年龄是5岁、8岁、10岁的数据?
在这里插入图片描述
练习4:只看年龄列,或者年龄以外的列(_id别管它)
在这里插入图片描述

U修改数据

基础语法: db.集合名.update(条件, 新数据 [,是否新增,是否修改多条])

是否新增:指条件匹配不到数据则插入(true是插入,false否不插入默认)
是否修改多条:指将匹配成功的数据都修改(true是,false否默认)

升级语法
说明:

是否新增:指匹配不到数据则插入(true-是插入,false-否不插入默认)

是否修改多条:将匹配成功的数据都修改(true-是,false-否默认)

db.集合名.update(条件, 新数据)
					  {修改器: {:}}
修改器作用
$inc递增
$rename重命名列
$set修改列值
$unset删除列

准备工作

use test2;
for(var i = 1; i<= 10; i++){
	db.c3.insert( {"uname":"zs"+i,"age":i} );
}

练习1:将{uname:zs1}改为{uname:zs2}
在这里插入图片描述
发现:默认不是修改,而是替换

解决:使用升级语法 修改器

需求:使用修改器将zs4的姓名改为zs44

语法:db.c3.update({uname:“zs4”}, {KaTeX parse error: Expected 'EOF', got '}' at position 21: …{uname: "zs44"}}̲) ![在这里插入图片描述](…set)
age 增加 111 (修改器:$inc)
who 改字段 sex (修改器:$rename)
other 删除 (修改器:$unset)

语法分析:

db.c4.update({age:888}, {  $set: {uname: "webopenfather"}     })
						   $inc: {age: 111} 
						   $rename: {who: "sex"} 
						   $unset: {other: true} 

db.c4.update({age:888}, {  
	$set: {uname: "webopenfather"},  
 $inc: {age: 111},
 $rename: {who: "sex"}, 
 $unset: {other: true}
})

在这里插入图片描述
练习4:验证语法最后两个参数(了解)

【验证】是否新增true是false否:修改uame 等于 zs30的年龄 30岁
在这里插入图片描述
【验证】是否修改多条true是,false否默认

在这里插入图片描述

D删除数据

语法:db.集合名.remove(条件 [, 是否删除一条] )

注意:是否删除一条 true是,false否 默认
在这里插入图片描述

小总结

高级开发攻城狮统称:所有数据库都需要增删改查CURD标识

MongoDB删除语法:remove

增Create
db.集合名.insert(JSON数据)

删Delete
db.集合名.remove(条件 [,是否删除一条true是默认false删除所有])

改Update
db.集合名.update(条件, 新数据 [,是否新增true是false否默认,是否修改多条true是false否默认])

升级语法: db.集合名.update(条件,{ 修改器:{键:值} })

查Read
db.集合名.find(条件 [,要显示的列])

升级语法: db.集合名.find({ 键:{运算符:值} } )

其他命令

  • Help查看命令提示

db.help()

db.集合名.help()

db.集合名.find().help()

  • 显示当前db状态

db.stats()

  • 当前db版本

db.version()

  • 查看当前db的链接机器地址

b.getMongo()

■MongoDB排序&分页

需求
从数据库获取数据 需要排序 、多页展示如何实现?
在这里插入图片描述
在这里插入图片描述
数据准备:

use test3    //建库
db.c1.insert({_id:1,name:"a",sex:1,age:1})    //
db.c1.insert({_id:2,name:"a",sex:1,age:2})    //
db.c1.insert({_id:3,name:"b",sex:2,age:3})    //
db.c1.insert({_id:4,name:"c",sex:2,age:4})    //
db.c1.insert({_id:5,name:"d",sex:2,age:5})    //插入数据

db.c1.find()      //查看数据

排序

  • 语法:db.集合名.find().sort(JSON数据)

  • 说明:键-就是要排序的列/字段、值:1 升序 、 -1 降序

  • 练习:年龄升序&降序
    在这里插入图片描述
    Limit与Skip方法

  • 语法:db.集合名.find().sort().skip(数字).limit(数字)

  • 说明:skip跳过指定数量(可选),limit限制查询的数量

  • 练习:1-降序查询查询2条,2-降序跳过2条并查询2条
    在这里插入图片描述
    实战分页
    需求:数据库 1 - 10数据,每页显示两条(5页)

语法:db.集合名.find().skip().limit(2)

skip计算公式:(当前页 - 1) * 每页显示条数

1页    1  2		0
2页    3  4		2
3页    5  6		4
4页    7  8		6
5页    9  10		8

小总结

db.集合名.find()

.sort({列: 1/-1}) 排序

.skip(数字) 跳过指定数量

.limit(数字) 限制查询条数

.count() 统计总数量

不够:百度或谷歌

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值