什么是MongoDB
MongoDB是一种面向文档的数据库管理系统,在开始今天的学习之前,先来看看数据库的分类
数据库的分类:
- 关系型数据库
- MySQL、Oracle、DB2、SQL Server
- 关系数据库中全都是表
- 非关系型数据库
- MongoDB、Redis
- 键值对数据库,这个就和爬虫关系了
- 文档数据库 MongoDB
这个了解一下,我们后面还要学习其他的数据库,那么我们为什么要学习这个东西呢,
安装MongoDB
直接给出官网链接:MongoDB
如果官网上不去没关系啊,直接去菜鸟教程:菜鸟教程里面有详细的安装说明
但是:
如果我们不想安装到C盘,想安装到系统盘,那就贼麻烦,每个电脑都有不同的问题,解决方法也不大相同,这里我 windows 系统,是安装到D盘的 ,如果小伙伴系统和我一样,可以看看我的折腾记录,或者直接选择按菜鸟教程的步骤,安装,实在不行,B站也可以参考,反正,,我安装了一早上才弄好,太憨了(哭哭
开始一切正常,NEXT 就完事了,
一路next过后,我的D盘根目录下出现了MongoDB
打开找到 bin 目录,然后添加到环境变量,这个相信大家都会,我就放一个我的图
按照网上的教程,这个时候打开cmd 输入mongod 就出来好多东西如图
仔细看他有个dbpath 是C盘根目录下的,这就很麻烦,所以我们要改启动文件
首先,先在MongoDB刚才的文件夹里新建一个data ,然后再data里再新建两个 分别是 db 和 log
建好了以后我们可以更改我们这个启动文件了,在bin目录下找到 .cfg 的文件,然后看图,他上面还有一个 dbpath 也改到自己的路径里,就是MongoDB
下的data
里的db
文件夹,那个截不到了,对应改一下就好,和下面这个差不多。
然后就是设置启动服务了,以管理员身份打开cmd,输入:mongod --dbpath=D:\MongoDB\data\db --logpath=D:\MongoDB\data\log\mongodb.log --install --serviceName "MongoDB"
然后回车,如图: 注意:这个都是按我的路径写的,如果不一样还要改一改,回车后出现下面这个就成功了。
当然,你可能需要把之前的服务删了,看图:我第二次删失败了,是因为没有这个服务,有的话就是第一个的样子,删了以后,再按上面的方法添加服务
我们这样启动服务 net start MongoDB
,如果失败了,就再来一次
然后打开127.0.0.1:27017,出现图中的样子,就好了
但是,每次开机都启动服务有点麻烦,我们可以把服务改为自动的那种,看图:
这样以后就完美了。然后我们可以直接在cmd中输入 mongo 启动了
如果没有启动没关系,可能需要重启电脑之类的,我们可以去刚才的bin 目录双击执行 mongo.exe 文件就可以,总之只要服务起来,可以连接到 127.0.0.1:27017 就好。双击执行就是这样: 其实没有什么区别
安装就说这么多吧,反正不在系统盘挺折腾人的,如果伙伴们还是有问题,可以再看看其他博客,视频,或者私聊我也可以,总之要细心,路径要对。
对MongoDB的操作
1.基本指令
在后面的操作中,我会使用一个叫做 tes
的数据库,在里面建立 students 集合,并在其中插入数据
show dbs //显示当前所有数据库
use test //进入stus数据库
db //显示当前所处的数据库
show collections //显示数据库中集合
其实,数据库是不用手动建立的,当他里面有了数据,有了集合和文档的时候,就会自动建立
数据库的CEUD操作
就是增删查改
1.增加数据
# 注意啊,我们现在还在test数据库中,下面我们进行操作
db.stus.insert({name:"小明",age:18,gender:"男"}) # 这样就插入了一个
db.stus.insert([
{name:"小华",age:12,gender:"男"},
{name:"小明",age:14,gender:"男"},
{name:"小红",age:19,gender:"男"},
{name:"小蓝",age:19,gender:"男"},
{name:"小花",age:13,gender:"男"}
]) #写一个集合,里面放要插入的文档就可以插入多个
这里先说一下,在我们插入数据的时候,Mongodb会自己生成一个对象的id,当然我们也可以自己定义,但是注意,这个id就好像人的身份证,不能重复
db.stus.insert({_id:"1",name:"老李",age:34,gender:"男"})
除了用insert, 还有
db.stus.insertOne(doc) 插入一个
db.stus.insertMany(doc) 插入多个
还是一样的传入文档,其实insert就是这俩个给的合体
2、查询数据
一会看图,就会看到我们设置的id。
db.stus.find() //这个查询所有的数据
db.stus.find({name:"小明"})
db.stus.find({age:19})//括号里面传入条件对象,查询指定条件的数据,返回的是个对象集合
db.stus.findOne({_id:"1"}) //查找符合条件的第一个文档返回的是文档对象
db.stus.find().count() //查询一共有多少数据
//对一个文档对象,加点可以查询属性值
db.stus.findOne({name:"小明"}).age //前面返回的是文档对象,.age 查询其age属性
查年龄大于20
db.stus.find({age:{$gt:20}})
大于等于30
db.stus.find({age:{$gte:30}})
小于14
db.stus.find({age:{$lt:14}})
小于等于 14
db.stus.find({age:{$lte:14}})
不等于 19
db.stus.find({age:{$ne:19}})
等于 18
db.stus.find({age:{$eq:18}})
注意格式不要乱,括号不要少
查看前3条数据
db.numbers.find().limit(3)
查看4-7条数据
db.numbers.find().skip(3).limit(4)
skip()事实是跳过了3条数据,然后找4条
查询年龄小于14或大于20的
db.stus.find({$or:[{age:{$lt:14}},{age:{$gt:20}}]})
查询年龄小于14同时性别是男的。
db.stus.find({$and:[{age:{$lt:14}},{gender:"男"}]})
db.stus.find().pretty() # 格式化输出,就好看
# 查询出的数据默认按id排序,我们也可以指定排序方式
db.stus.find({}).sort({age:1})
#给sort里传一个对象,1是升序,-1是降序
# 如果查询后只想看其中的几个数据,可以在第二个参数的位置设置查询结果的 投影
db.stus.find({},{age:1,_id:0,name:1})
# 1 是显示 0 是不显示,默认_id 显示,
# 查询在某个范围的数据
db.stus.find({age:{$in:[14,18,24]}})
# 不在范围就$nin
正则表达式查询:
db.stus.find({name:/李/})
db.stus.find({name:"^李"})
db.stus.find({name:/a/i})
db.stus.find({name:{$regex:"a",$options:"i"}})
# 加i 忽略大小写
3.修改数据
# 默认用新对象直接替换旧对象,而不是修改旧对象的对应属性值,默认只修改第一个,
db.stus.update({_id:"1"},{age:15})
当然我们可以只修改对应的值,默认修改一个,
db.stus.update({name:"小花"},{$set:{age:15,gender:"女"}})
db.stus.update({age:19},{$set:{gender:"女"}})
我们可以用updateMany来修改多个
我们还可以通过unset来删除某个属性
db.stus.update({name:"小华"},{$push:{like:"ll"}})
# 用来向数组中添加,但是不管是否重复,同样的,pop就是删除其中一个,如果该数组不存在就新建一个
db.stus.update({name:"小华"},{$addToSet:{like:"ll"}})
# 这个时不重复的添加,有了就不加了
为所有年龄低于17的加4岁
$inc 数据在原有基础上增加
db.stus.updateMany({age:{$lte:17}},{$inc:{age:4}})
4、删除数据
db.stus.remove() # 默认删除多个,
#同样括号里传入对象,和find传入方法相同,
#注意find不传对象可以,但是remove必须传入对象,如果传入空对象,则删除所有
#如果删多个第一个传条件, 第二个true表示只删除一个,
db.stus.remove({},true)
db.stus.deletOne()删一个
db.stus.deletMany()删多个
删除集合
db.<collection>.drop()
如:db.stus.drop()
删除数据库
db.dropDatabase()
对Mongodb的基础操作就说这么多把,还有更多操作可以去看看官方文档。今天没有实例,只是学一下 MongoDB的基础操作,明天,害,继续学习MongoDB,看看 mongo和爬虫的交互
我又来要赞了,如果觉得讲的还算详细,点个赞再走吧,欢迎各位大佬评论指出问题,如果有什么问题也欢迎评论,私聊。