一、数据库简介
数据库就是用来存放数据的仓库
- 关系型和非关系型数据库软件的项目数据
相同点:都是数据库软件,用来存放项目数据
不同点:
可以按如下步骤进行安装
wins+R 输入servises.msc查看mongodb是否安装完成
// 查看数据库 show databases
//选择使用哪个数据库 use 数据库的名称 (当该数据库有数据时,系统自动创建)
// 查看集合 show collections
//创建集合 db.collections("集合名")
//删除集合 db.集合名.drop()
如何删除数据库?
- 通过use语法选中数据库,
- 通过db.dropDatabase()删除数据库
总结:
数据库
查看:show databases
创建:有单独的语法,但是忽略,隐式创建
选择:use 数据库名
删除:
集合
查看:show collections
创建:db.createCollection('集合名')
//多学一招:后期插入数据,隐式创建集合
删除:db.集合名.drop()
二、增删改查
- 增
语法:db.集合名.insert(JSON数据)说明:集合存在-则直接插入数据,集合不存在-隐式创建
use test2
db.c1.insert({uname:"webopenfather",age:18})
//1.数据库和集合不存在都隐式创建
//2.对象的键统一不加引号方便看,但是查看集合数据时系统会自动加
//mongodb会给每一条数据增加一个全球唯一的_id键
- 可以自定义id值,只需要给插入的JSON数据增加_id键即可覆盖
db.c1.insert({_id:1,uname:"webopenfather",age:18})
- 可以一次性插入多条数据,传递数据,数组中写一个个JSON数据即可
db.c1.insert([
{uname:"z3",age:3},
{uname:"z4",age:3},
{uname:"w5",age:3}
])
//一次性插入三条数据到c1集合
- 快速插入数据,可以用for循环
for(var i=1;i<10;i++){
print(i)
}
//需求:在test2数据库里c2集合中插入10条数据,分别为a1,a2,...a10
for(var i=1;i<10;i++){
db.c2.insert({uname:"a"+i,age:i})
}
- 查
基础语法:db.集合名.find(条件[,查询的列])
条件:
查询所有条件 {}或者不写
查询age=6的数据 {age:6}
既要age=6又要性别=男
查询的列(可选参数
不写-这查询全部列(字段
{age:1} 只显示age列(字段
{age:0} 除了age列(字段都显示
不管怎么写系统自定义的_id都会在
运算符 | 作用 |
---|---|
$gt | 大于 |
$gte | 大于等于 |
$it | 小于 |
$lte | 小于等于 |
$ne | 不等于 |
$in | in |
$nin | not in |
如下为查询所有例子:
- 查询年龄大于5岁的数据?
//升级语法
db.集合名.find({键:值}) 注:值不直接写
db.集合名.find({
键:{运算符:值}
})
- 查询年龄是5岁,8岁,10岁的数据?
- 只看年龄列,或者年龄以外的列(_id
- 改
语法:db.集合名.update(条件,新数据[,是否新增, 是否修改多条])
是否新增:指条件匹配不到数据则插入(true是插入,false否不插入默认)是否修改多条:指将匹配成功的数据都修改(true是,false否默认)
升级语法: 语法:db.集合名.update(条件,新数据) {修改器:{键:值}}
- 删
语法: db.集合名.remove(条件[,是否删除一条true是false否默认])
格式化代码
db.集合名.find().pretty()
三、排序&分页
- 排序:
语法:db.集合名.find().sort(JSON数据)说明:键 - 就是要排序的列/字段 、值 :1.升序 -1 降序
- 分页
Limit与 Skip方法
语法:db.集合名.find().sort().skip(数字).limit(数字)说明:skip 跳过指定数量(可选),limit 限制查询的数量
语法:db.集合名.find().skip().limit(2)
skip计算公式:(当前页-1)* 每页显示条数
四、聚合查询
聚合查询
顾名思义就是把数据聚起来,然后统计
语法:db.集合名.aggregate([
{管道:{表达式}}
])
常用管道:
$group | 将集合中的文档分组,用于统计结果 |
$match | 过滤数据,只要输出符合条件的文档 |
$sort | 聚合数据进一步排序 |
$skip | 跳过指定文档数 |
$limit | 限制集合数据返回文档数 |
常用表达式
$sum | 总和 |
---|---|
$sum:1 | 同count表示统计 |
$avg | 平均 |
$min | 最小值 |
$max | 最大值 |
- 例:统计男生,女生总年龄
db.c1.aggregate({
{
$group:{
_id:"$sex",
rs:{$sum:"$age"}
}
}
})
五、优化索引
数据库中的索引
索引是一种排序好的便于快速查询的数据结构
作用:帮助数据库高效的查询数据
- 创建索引语法
语法 :db.集合名.createIndex(带创建索引的列[,额外选项])
参数:
带创建索引的列:{键:1,....,键:-1}
- 删除索引语法
全部删除:db.集合名.dropIndexes()删除指定:db.集合名.dropIndex(索引名)
- 查看索引语法
db.集合名.getIndexes()
六、权限机制
在DOS窗口直接输入命令就可以登录数据库
在实战工作中是不允许的
使用权限机制,开启验证模式
开启验证服务
指用户需要输入密码账号才能登录使用
- 添加超级管理员
- 退出卸载服务
- 重新安装需要输入账号密码的服务(注在原安装命令基础上加上--auth即可)
- 添加超级管理员
先终止数据库
然后启动
use admin
db.createUser({
"user":"账号",
"pwd":"密码",
"roles":[{
role:"角色",
db:"所属数据库",
}]
})
- 脚下留心:DOS窗口必须用管理员身份运行
- 安装需要验证身份的mongodb服务
输入命令: mongod --install --dbpath E:\code\mongodb\data
--logpath E:\code\mongodb\logs\mongodb2.log --auth
启动服务
用超级管理员身份登录数据库
如果只输入mongodb就不能登入
如下图两种方法