MongoDB的介绍
1.什么是MongoDB?
MongoDB是基于分布式文件存储的数据库,有C++编写旨在为WEB应用提供可扩展的高性能数据存储解决方案,是一个介于关系型数据库和非关系型数据库(nosql)之间的产品,是非关系数据库中功能最丰富,最像关系数据库的
2.MongoDB的优缺点:
优点:
·MongoDB提供了一个面向文档存储,操作简单容易
·如果负载增加,它可以分布在计算机网络中的其他节点上(分片)
·MongoDB支持多种语言
缺点:
·MongoDB不支持事务
·MongoDB不能进行多表联查
3.为什么学习MongoDB?
MongoDB解决Mysql的“三高”问题:
·对数据库高并发写入
·对海量数据高效率存储访问需求
·对数据库高扩展和高可用需求
4.实际应用:
1.社交场景:朋友圈,附近的人的地点的存储
2.游戏场景:比如用户当前装备,得分
3.物流场景:快递的位置,状态,途径
4.视频场景:直播中的点赞数和互动留言
MongoDB的名词解释
![](https://i-blog.csdnimg.cn/direct/cbc0315cef4c416d8748a2acb6890300.png)
MongoDB的数据类型
![](https://i-blog.csdnimg.cn/direct/344018f4d66e48c1b731aa23c7ba3aa3.png)
MongoDB的基本操作:
数据库基础命令:
//查看所有数据库
可以直接访问这些有特殊作用的数据库
admin:’root‘数据库(权限的角度),要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限,一些特定的服务器端命令也只能从这个数据库运行
local:这个数据库永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config:当mongoDB用于分片设置,config数据库在内部使用,用于保存分片的相关信息
show dbs;
//创建并使用数据库(在MongoDB,集合只有在内容插入后才会真正创建)
// 语法:use 数据库名;
use myschool;
查看当前数据库对象
db;
//删除数据库
db.dropDatabase();
数据集合(表)操作
//集合(相当于mysql的表)
//在当前库中创建集合(表)
// 语法:db.createCollection('集合名')
db.createCollection('student')
//查看当前库的集合(表),以下语句都可以
show collections;
show tables;
//删除集合
//语法: db.集合名.drop();
db.student.drop();
数据文档(文档相当于mysql中的一条数据记录)基础操作:(增删改查)
//1.插入数据
// document: 类似 json 格式的键值对
// 语法:db.collection名.insert(document)
db.student.insert({sname:'李四',age:15})
//删除数据
//全部删除
// 语法:db.集合名.remove({});
db。student.remove({});
//带条件删除 : 会把符合条件的全部是删掉
db.student.remove({sname:'张三'});
//带条件删除:{justOne:true} 只删除 符合条件 键编号较小 的一条数据
db.student.remove({age:15},{justOne:true});
修改数据 :{$set:{新值}
//如果1有对各结果符合条件是,只改_id最小的
db.student.update({sname:'张三'},{$set:{age:199}});
//{multi:true}:把符合条件的都修改
db.student.update({sname:'张三'},{$set:{age:88},{multi:true}});
//{upsert:true} ://没匹配到数据就作为新增数据添加到集合中
db.student.update({sname:'大头儿子'},{$set:{age:55}},{upsert:true})
//{$inc:{}}:数值改变:可加可减(点赞功能实现)
//年龄加1,
db.student.update{
{sname:'大头儿子'},
{$inc:{age:1}}
}
// {$inc:{age:-1}}:年龄减1
//查询
//全查
db.student.find();
//根据条件查询:符合条件的全部查到
db.student.find({sname:'大头儿子'});
//数值判断条件查询
//小于88岁的人
db.student.find({age:{$lt:88}})
//40-90之间的,相当于and
db.studnet.find({age:{$lt:90,$gt:40}})
//or 查询大于18,或者小于90的
db.student.find({
$or:[
{age:{$gte:18}},
{age:{$lte:90}}
]
})
//模糊查询
//查询sname中包含 儿的 名字
db.student.find({sname:/儿/});
//查询以什么开头:以大开头
db.student.find({sname:/^大/});
//查询以什么结尾
db.student.find({sname:/子$/});
//分页:
//语法:db.集合名.find().limit(n);
//查询前两条数据
db.student.find().limit(2);
//跳过多少条查询n条数据
db.集合名.find().limit(n).skip((页码-1)*步长);
//跳过4条数据,查询2条
db.student.find().limit(2).skip(4);
MongoDB的数据比较符
![](https://i-blog.csdnimg.cn/direct/57ff4b863ed34a7ca63901203f7eff7b.png)
数据的分页,排序,索引:
//统计个数
db.student.find({sname:'大头儿子'}).count()
//排序
// 升序:1 //降序:-1
//年龄升序
db.studnet.find().sort({age:1})
//年龄降序
db.studnet.find().sort({age:-1});
//查看索引,//默认是主键
db.studnet.getIndexes()
//创建索引:
db.student.createInex({age:1})
//删除索引
db.student.dropIndex({age:1});