Mongodb数据库
- 什么是数据库
- 数据库分类和它的代表
- 1.关系型数据库【SQL】
- 2.非关系型数据库【NOSQL】
- 如何区分一个数据库属于哪一个类别?
- 有没有表,有就是关系型数据库,没有就是非关系型数据库
- 数据库构成
- 区别:
- 非关系型数据库优势:
-
- 性能
- NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高
-
- 可扩展性
- 同样是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展
- 关系型数据库的优势
-
- 复杂查询
- 可以用SQL语句方便的在多个表之间做非常复杂的数据查询
-
- 事务支持
MongoDB简介
- MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,意图为在WEB应用提供可扩展的高性能数据存储解决方案
- 分布式算法指的是将一个大型任务进行分解,将每个小任务的执行结果组合起来,返回一个整体
- 好处:给其他任务提供了可执行的机会
- 代表:git
- 存储类型(BSON)
- 什么是BSON?
-bson是json的超集,bson拥有json的所有,但是它有json没有的 二进制类型
- bson是一种类似json的二进制形式的存储格式,简称Binary JSON,他和JSON一样支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型
- 特点:轻量性,可遍历性,高效性
- MongoDB的优点
- 高性能,易部署,易使用,存储数据方便
- 面向集合存储,易存储对象类型的数据
- 模式自由
- 支持动态查询
- 支持完全索引,包含内部对象
- 支持查询
- 支持复制和故障恢复(例如:git的版本管理工具)
- 使用高效的二进制数据存储,包括大型对象(如视频等)
- 自动处理碎片,以支持云计算层次的扩展性
- 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言
- 文件存储格式位BSON
MongoDB的操作
> help 查看帮助
> show dbs 显示数据库列表
> use dbname 创建数据库
- 如果存在指定名称的数据库,则为切换至该数据库,如果不存在该名称的数据库,则为创建该名称的数据库
- 注意:如果数据库内无任何数据,会被MnongoDB系统默认为空文件,不会显示在数据库列表中
> show collectons 显示数据库中的集合
> 增
- db.web.save({"name":"老李"}) 创建了名为web的集合(在名为web的集合中),新增了一条{"name":"老李"}的数据
- db.web.insert({"name":"老张"}) 创建了名为web的集合(在名为web的集合中),新增了一条{"name":"老张"}的数据
- 注意:save()和insert()也存在着区别,save()参数带id的话就是修改,但是insert()参数带id就会报错
> 删
- db.集合名.remove({}) 删除该集合下的所有数据
- db.集合名.remove({name:"张三"}) 删除该集合下的name="张三"的数据
- db.集合名.drop()或db.runCommand({"drop":"库名"}) 删除该名的集合
- db.runCommand({"dropDatabase":1}) 删除当前数据库,注意此时1没有双引号
> 改
- db.集合名.update({"name":"赵虎"},{$set:{sex:"men"}},true,true)
- 第一个参数:查找条件
- 第二个参数:修改内容,主键不能修改
- 第三个参数:true表示匹配所有符合条件的数据,fales表示匹配第一个符合条件的数据
- 第四个参数:true表示修改所有匹配到的数据,false表示修改第一条匹配到的数据
> 查
- db.集合名.find() 查找该库名中所有的数据
- db.集合名.findOne() 查找该集合中的第一条数据
- db.集合名.find().pretty() 格式化查询到的数据
- $gt --> >
- $lt --> <
- $gte --> >=
- $lte --> <=
- $ne --> <>不等于
- $mod --> key%参1余数为参2的
- $in --> 条件符合参数中的任意一个的
- $nin --> 条件不属于参数中的任意一个
- $size --> 查询字段的内容长度等于参数的数值的
- $exists --> true|false true表示包含该字段,false表示不包含的
- $or --> 表示符合任意一个条件的数据
- db.web.find({age:{$gt:18}}) 查找年龄大于18的数据
- db.集合名.find().sort({age:-1}) 年龄降序排列
- db.集合名.find().sort({age:1}) 年龄升序排列
- db.集合名.find().limit(2) 截取集合中的前两条数据