#安装mongodb#
第一步 下载mongoDb: 官网https://www.mongodb.com/
第二步 进行安装配置修改Data directory 和 Log Directory 将数据目录和日志目录存放在D盘
第三步 取消install MongoDb Compass这个是安装可视化工具的意思在这里不需要
#配置环境变量加入到系统中的path环境变量中#
第一步 选择计算机右击属性 高级系统设置 高级 环境变量 系统变量 path 新建 把数据库的目录路劲到bin这一层
# mongodb账户权限的配置
第一步 :mongo进入链接
第二步 use admin
第三步 创建超级管理员:db.createUser({user:'admin',pwd:'123456',roles:[{role:'root',db:'admin'}]})
第四步 修改配置文件项目安装包的bin目录下面的mongod.cfg 用记事本进行打开:找到security这一项: 添加 security:authorization:enabled
第五步 重启服务;window+r 输入services.msc回车 找MongoDB Server点击右键重启
第六步 重新登录: mongo admin -u admin -p 123456
单个创建数据库的权限:
第一步 use user;
第二步 db.createUser({user:'useradmin',pwd:'123456',roles:[{role:'dbOwner',db:'user'}]})
第三步 进入单独的数据库 mongo user -u useradmin -p 123456
其他命令操作
查看当前库下的用户 show users
删除用户 db.dropUser('useradmin')
修改密码 db.updateUser('admin',{pwd:'234567'})
密码认证 db.auth('admin','password')
#mongo数据库的命令操作#
第一步进行链接 打开终端输入mongo 进入链接
第二步查看所有数据库 输入 show dbs; admin config local是数据内置的数据库 不用管理
第三步创建数据库及进入数据库:use itying ; 创建itying的数据库,这时候show dbs是查不到当前表的,需要往数据库中插入表以及数据。进入数据库也是执行use itying
第四步插入表和数据输入 db.user.insert({"name":"zhangsan"}) 相当于创建了user表插入了数据
第五步查看数据中所有的表也叫集合:进入数据库 use itying; show collections;最后是user表
第六步查看user表中的数据 db.user.find()
第七步删除数据库 首先要进入到数据库use itying;删除数据库 db.dropDatabase();
第八步删除表也就是集合: db.user.drop()
#查找数据的操作user表#
查找所有的记录 db.user.find()
查找指定数据 db.user.find({"age":"12"})
查询大于或小于age 22的方法: db.user.find({'age':{gt:22}}) db.user.find({'age':{lt:22}})
查询大于等于或小于等于age 22的方法: db.user.find({'age'{gte:22}}) db.user.find({'age':{lte:22}})
查找age>=23 age<=26的方法: db.user.find({"age":{gte:23,lte26}})
模糊查询用于搜索,查询name中包含zhang的数据:db.user.find({name:/zhang/})
查找name中以z开头的数据: db.user.find({name:/^z/})
查找name中以s结尾的数据: db.user.find({name:/s$/})
查找指定列的数据比如name;db.user.find({}.{name:1})
查找指定列的数据并有条件比如age>20只显示age; db.user.find({"age":{$gt:20}},{age:1})
按照年龄进行升序 降序;db.user.find().sort({age:1}) db.user.find().sort({age:-1})
查询age=12 name='zs'; db.user.find({name:'zs',age:12})
查询前5条数据 bd.user.find().limit(5)
查询10条以后的数据 db.user.find.skip(10)
查询10条以后的两条数据db.user.find.skip(10).limit(2)
查询数据的数量 db.user.find().count()
limit与skip可用于分页查询 db.user.find().limit(每页数).skip(第几页-1再乘每页数)
或的语法使用 db.user.find({$or:[{age:22},{age:25}]})
查询第一条数据 db.user.findOne()
查询某个结果的数据统计 db.user.find({age:{$gte:25}}).count()
#mongodb数据的增删改查#
把name是zs的age修改为18: db.user.update({name:'zs'},{$set:{'age':18}});也可以进行新增
把所有匹配的全部更新把age为12的性别改为男: db.user.update({'age':12},{$set:{"sex":"男"}},{multi:true})
删除数据:db.user.remove({age:12})
按查找条件删除并且只删除一条数据 db.user.remove({age:{$gt:12}},{justOne:true})
# 索引基础 查找数据的时间会变得更快
查询某个语句具体执行的时间: db.user.find({name:'zs'}).explain('executionStats')
查询当前集合的索引: db.user.getIndexes()
给name创建索引:db.user.ensureIndex({'name':1})
删除索引: db.user.dropIndex({"name":1})
给字段设置唯一的索引,让字段的值不能够进行重复:db.user.ensureIndex({'age':1},{"unique":true})
# 关系型数据库表与表之间的关系
1 一对一的关系:一个人对应一个身份证
2 一对多的关系:一个班级对应多个学生
3 多对对的关系:一个学生可以选择多门课程 一门课程也可以被多个学生选修
# mongoDB聚合管道:可以对集合中的文档进行变换和组合
数据模拟:order订单表, 订单商品表order_item
db.order.insert({"order_id":"1", "uid":10, "trade_no":"111", "all_price":100, "all_mum":2})
db.order.insert({"order_id":"2", "uid":7, "trade_no":"222", "all_price":90, "all_mum":2})
db.order.insert({"order_id":"3", "uid":3, "trade_no":"333", "all_price":20, "all_mum":6})
db.order_item.insert({"order_id":"1", "title":'商品鼠标', "price":"50", "mum":1})
db.order_item.insert({"order_id":"1", "title":'商品键盘', "price":"50", "mum":1})
db.order_item.insert({"order_id":"2", "title":'牛奶', "price":"50", "mum":1})
db.order_item.insert({"order_id":"2", "title":'酸奶', "price":"40", "mum":1})
db.order_item.insert({"order_id":"3", "title":'矿泉水', "price":"2", "mum":5})
db.order_item.insert({"order_id":"3", "title":'毛巾', "price":"10", "mum":1})
1 $project查询指定的字段,最后的结果就是只显示指定的字段。
比如查找order中tarde_no和all_price字段
db.order.aggregate([
{
$project:{trade_no:1,all_price:1}
}
])
2 $match用于过滤相当与find()方法中的参数
db.order.aggregate([
{
$project:{trade_no:1,all_price:1}
},
{
match:{"all_price":{gte:90}}
}
])
3 $group统计每个订单的订单数量,按照订单号进行分组 并求num的和
db.order_item.aggregate([
{
group:{_id:"order_id",total:{sum:"num"}}
}
])
4 $sort 进行排序
db.order.aggregate([
{
$project:{trade_no:1,all_price:1}
},
{
$sort:{"all_price":-1}
}
])
5 $limit 限制返回的数据条数
db.order.aggregate([
{
$project:{trade_no:1,all_price:1}
},
{
$sort:{"all_price":-1}
},
{
$limit:1
},
])
6 $skip 跳过几条数据
db.order.aggregate([
{
$project:{trade_no:1,all_price:1}
},
{
$sort:{"all_price":-1}
},
{
$skip:10
},
])
7 $lookup 用于表关联,查询订单表中某个订单号的数据对应商品表中的所有的数据
例如:[order_id:'', Trade_no:'', items:[{title:'鼠标',price:20},{title:'键盘',price:30}] ]
db.order.aggregate([
{
$lookup:
{
from :'order_item', 要关联的表
localFiled:'order_id', 当前表要关联的字段
foreignFieid:'order_id' , 要关联表对应的id,
as:'items' 用什么字段存储数据
}
},
{
match:{"all_price":{gte:90}} 后面可以再跟筛选的条件
}
])
# nodejs 操作mongoDB数据库
第一步初始化项目 npm init -y 进行安装 npm install mongodb --save
第二步 进行链接
const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017' 数据库的地址:通过cmd打开终端输入monge回车
会显示地址。
const dbName = 'myproject' // 要操作的数据库
const client = new MongoClient(url,{useUnifiedTopology:true})
client.connect(function(err){
if(err){console.log('链接失败') return }
console.log('Connected successfully to server')
const db = client.db(dbName) 通过db就可以操作myproject的数据库了
查找数据从user表中查找
db.collection('user').find({}).toArray((err,data)=>{
console.log(data)
client.close() 操作后一定要关闭链接
})
增加数据
db.collection('user').insertOne({'name':'zs'},(err,data)=>{
if(err){console.log('增加失败') return }
console.log('增加成功')
client.close() 操作后一定要关闭链接
})
删除一条数据
db.collection('user').deleteOne({'name':'zs'},(err,data)=>{
if(err){console.log('删除失败') return }
console.log('删除成功')
client.close() 操作后一定要关闭链接
})
删除多条数据
db.collection('user').deleteMany({'name':'zs'},(err,data)=>{
if(err){console.log('删除失败') return }
console.log('删除成功')
client.close() 操作后一定要关闭链接
})
修改数据
db.collection('user').updateOne({'name':'zs'},{$set:{"name":"ls"}},(err,data)=>{
if(err){console.log('修改失败') return }
console.log('修改成功')
client.close() 操作后一定要关闭链接
})
})
# 服务器与数据库之间的链接
const {MongoClient} = require('mongodb')
const url = 'mongodb://localhost:70732'
const dbName = 'itying'
app.get('/',function(req,res)=>{
MongoClient.connect(url,(err,client)=>{
if(err){console.log(err) return }
let db = client.db(dbName)
db,collection('user').find({}).toArray((err,data)=>{
if(err){console.log(err) return }
res.send(data)
client.close() 操作后一定要关闭链接
})
})
})