语法类似于javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。
MongoDB 于 mysql
缺点:不支持连表查询,不支持sql语句,不支持事务存储过程,所以不适合存储数据间比较复杂的数据,一般主要当做数据仓库来使用。
适用 日志系统 股票等
不适用于 电子商务系统等需要多表查询的功能
基本概念
1 文档
文档是mongodb中数据的基本单元,多个键值对有序的放置在一起就是文档
mongodb区分大小写数据类型 每一个文档尺寸不能超过16M
2 集合
集合就是一组文档,多个文档组成一个集合,集合类似于mysql中的表
无模式是指 在一个集合中可以包含不同格式的文档
mysql需要先建表再插数据 nosql不需要
模式自由 :意思就是集合里面没有行和列的概念
mongodb中的集合不用创建,没有结构,所以可以放不同格式的文档
3 数据库
多个集合可以组成数据库。一个mongodb实例可以承载多个数据库。
一个数据库中可以有多个集合
一个集合中可以有多个文档
use dbname 有则使用 没有则创建 如果是空的没有 使用 会自动删除
show dbs
show tables
db.php.insert({}) php为集合名称 隐式创建
db.php.find() 查询所有
db.php.findOne() . 查询第一个文档
db.php.drop() 删除集合
db.dropDatabase() 删除数据库
help 全局 帮助
db.help 数据库帮助
db.php.help 集合帮助
4 增删改查
1)添加文档
文档就是键值对,数据类型是BSON格式 支持的值更加丰富
db.php.insert({‘name’:‘xiaowang’,‘age’:‘10’})
在每个添加的文档有一个唯一的_id字段
每个文档都有一个_id字段,并且同一集合中的_id值唯一,默认是ObjectId对象
可以自己定义_id,但是必须唯一 不然会报错
支持js代码 批量插入
2)删除文档
dp.php.remove({条件})
删除php集合中年龄大于7的文档
常用操作符:
$lt <
$lte <=
$gt >
$gte >=
$ne <>
$in
$nin
$or
$not
$mod 取模
$exists
KaTeX parse error: Expected '}', got 'EOF' at end of input: ….remove({age:{'gt’:7}})
3)更新文档
方法1:直接修改
语法:dp.php.update({条件},{新文档})
语法:dp.集合.update(条件,新文档,是否新增,是否修改多条)
是否新增:如果是 1 则没有满足条件的则新增
是否修改多条:如果是1 满足条件的都要修改
例:在集合php中修改 age=4的文档名称为小王
db.php.update({age:4},{name:"xiaowang}})
方法二:使用修改器
$inc: 加一个数字
KaTeX parse error: Expected '}', got 'EOF' at end of input: …date({age:3},{'set’ :{name:‘xiaozi’}})
db.php.update({age:3},{’$inc’ :{age:10}})
4)查询文档
db.php.find({条件})
db.php.findOne({条件})
db.php.find({age:{’$gt’:2}})
db.php.find({},{age:1}) //条件可以为空 ,1表示只显示age键
db.php.find({},{age:0}) //条件可以为空 ,0表示除age外都显示
根据年龄升降序排列
db.find().sort({age:1}) //升序
db.find().sort({age:0}) //降序
db.find().limit(3) //只显示前三个
db.find().skip(2).limit(3)//跨过两个文档 取三个 则意味 3-5
db.php.count() //统计集合中的文档
5 用户管理
权限概念:用户是属于数据库的,每个数据库都有自己的管理员,管理员登录后,只能操作所属的数据库。
创建用户
1 选择数据库
use 数据库名称
2 添加用户
db.addUser(用户名,密码,是否只读)
6 mongodb中的索引
6.1 普通单列索引
没有索引:
为name添加索引
db.java.ensureIndex({name:1}) //1为正序索引 -1是降序
db.集合名.ensureIndex({键名:1})
6.2 复合索引
db.集合名.ensureIndex({键名1:1/-1,键名2:1/-1})
6.3 子文档索引
db.集合名.ensureIndex({filed.subfield:1/-1})
6.4 唯一索引
db.php.ensureIndex({name:‘dasd’},{unique:true})
6.5 查看索引
db.集合名.getindexes() //查看创建了的索引
查看当前查询用到的索引 和查询数据的状态信息
db.集合名.find({name:‘xiao’}).explain()
6.6 删除索引
删除单个索引
db.php.dropIndex({name:1})
删除全部索引
db.php.dropIndexes()
6.7 重建索引
db.php.reIndex()
创建索引的时候,1是正序创建 -1 是倒叙创建
索引的创建在提高查询性能的同时,会影响插入性能,对于经常查询少插入的可以考虑用索引
复合索引要注意索引的先后顺序
每个键全建立索引,不一定能提高性能,索引不是万能的
在做排序工作时,如果是超大的数据量,可以考虑加上索引来提高排序的性能
7 主从复制