目录
1. MongoDB是什么?
MongoDB是一个非关系型数据库(No sql)
2. 为什么需要学习?
-
企业需求
-
爬虫爬取数据到一个量级 使用MongoDB比mysql好一些
3. MongoDB的特点?
-
无数据结构 (方便爬虫)
-
高性能(具有非常高的读写能力)
-
良好支持(完善文档,跨平台 ,稳定)
4.安装
-
下载安装文件(msi, 自己下载 用老师的)
-
安装
-
把bin目录添加到path环境变量里(C:\Program Files\MongoDB\Server\4.2\bin)
启动 MongoDB
mongodb --dbpath C:\Program Files\MongoDB\Server\4.2\data
连接MongoDB
mongo
5.基本命令
show dbs 展示数据库 cls 清屏命令 use admin 使用数据库/创建数据库 db 查看当前在使用的数据库 show collections / show tables 查看当前使用数据库的集合(表) db.dropDatabase() 删除当前使用的数据库
6.insert()
Collection 集合 ---> 表
Document文档 ---> 一行数据
不手动创建表(当没有这个表的时候,插入一条数据 表自动创建)
- db.mark.insert({x:1})
手动创建表
db.createCollection(name,options)
- name:创建的集合名称
- options:是一个文档,指定集合的配置
- capped: Boolean类型 默认False 没有设置上限 True 有上限
- size: number 表示设置上限的大小 字节 如果你设置的大小<256 , 默认为256
- max: number 指定上限集合中允许的最大文档数量
db.createCollection('mark1') db.createCollection('mark1',{capped:true,size:5000,max:4}) db.mark.isCapped() 检测当前集合有没有设置上限 false 没有 true 有 db.mark1.drop() 删除集合(表) 插入多条数据 db.mark1.insert([{name:'mark',age:18,sex:'male'},{name:'amy'}]) # 注意[] for(i=3;i<10;i++)db.mark1.insert({x:i}) db.createCollection('mark1') db.createCollection('mark1',{capped:true,size:5000,max:4}) db.mark.isCapped() 检测当前集合有没有设置上限 false 没有 true 有 db.mark1.drop() 删除集合(表) 插入多条数据 db.mark1.insert([{name:'mark',age:18,sex:'male'},{name:'amy'}]) # 注意[] for(i=3;i<10;i++)db.mark1.insert({x:i})
7.save()
# 指定_id ,找到就更新,反之就插入 db.mark1.save({_id:1,name:'amy'}) db.mark1.save({name:'amy'})
8.基本查询
# 基本查询 db.mark1.find({name:'mark'}) # 精确查询 db.mark1.find({name:'mark'}).pretty() # 以格式化的方式显示结果 db.mark1.findOne({age:18}) # 符合条件第一条数据 db.mark1.findOne({age:18,id:1}) # 多条件查询 # 基本符号 $gt : > $lt : < $gte: >= $lte: <= $ne : !=、$amp;$in : in $nin: not in $all: all $not: 反匹配(1.3.3及以上版本) # 定义方法查询 db.mark1.find({$where:function(){return this.age>18}}) 逻辑与或 > db.user.find({"name":"xiaolan"}) > db.user.find({"name":"xiaolan","hobby":["song1","writebook"]}) --- 直接写多个,中间以,隔开 > db.user.find({$or:[{"name":"xiaolan"},{"age":"10"}] }) --或:以$or开头,后面跟的是[] db.mark1.find({$and:[{age:{$gt:18}},{home:'长沙'}]}) db.mark1.find({$or:[{age:{$gt:18}},{home:'长沙'}]}) # 模糊查询 > db.user.distinct('name'); --去掉重复数据 > db.user.find({name:/ao/}) --模糊查询 注意:必须有{} > db.user.find({name:/^ao/}) --模糊查询 以ao开头 > db.user.find({name:/ao$/}) --模糊查询 以ao结尾
9.聚合查询,排序,映射
# 查看集合里数据个数 db.mark9.find().count() db.mark9.count() # 查看符合条件数据个数 db.mark9.find({age:18}).count() db.mark9.count({age:18}) # 查看前几条数据 限制个数 不分负号 db.mark9.find().limit(2) db.mark9.find().limit(-2) # 跳过 # 先跳过2条数据,在返回满足结果的前2条数据 db.mark9.find().skip(2).limit(2) # 映射 : 返回指定的字段,相当于SQl的Select # 如果为1返回该字段 _id:0 # 只显示age字段 db.mark9.find({},{age:1}) db.mark9.find({},{age:1,_id:0}) # 排序 db.mark9.find().sort({age:1}) # 按照年龄升序 db.mark9.find().sort({age:-1}) # 按照年龄降序
10.修改
db.集合名.update()
query :查询条件
update: 更新的内容
multi: 默认是false 表示只更新第一个符合条件的数据 true 把所有满足条件数据全部更新
db.mark9.update({name:'mark'},{name:'马克'}) # 正常更新,但是后面数据不保留 db.mark9.update({name:'张三'},{$set:{name:'罗翔'}}) # 指定键值更新 保留其余数据 db.mark9.update({sex:'女'},{$set:{sex:0}},{multi:true})
11.删除
db.mark1.drop() db.mark1.remove() # 删除全部 db.mark9.remove({age:18},{justOne:true}) # 删除满足条件一个数据 db.mark9.remove({age:18},{justOne:1}) # 删除满足条件一个数据 db.mark9.remove({age:18},{justTwo:true}) db.mark9.remove({age:18},{justThree:true}) ...... = db.mark9.remove({age:18})
12.创建索引
目的:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
# 创建索引前 db.test.find({name:'test9999'}) db.test.find({name:'test9999'}).explain('executionStats') # 39ms # 创建索引 db.test.ensureIndex({name:1}) # 创建索引后 db.test.find({name:'test9999'}).explain('executionStats') # 7ms # 删除索引 db.test.dropIndex({name:1})默认情况_id是集合的索引
查看集合索引 db.集合名.getIndexes()