MongoDb数据库介绍安装使用

#安装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() 操作后一定要关闭链接

})

})

})

相关推荐
让学习成为一种生活方式2 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
秋意钟28 分钟前
MySQL日期类型选择建议
数据库·mysql
Dxy12393102161 小时前
python下载pdf
数据库·python·pdf
桀桀桀桀桀桀2 小时前
数据库中的用户管理和权限管理
数据库·mysql
superman超哥3 小时前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
用户8007165452003 小时前
HTAP数据库国产化改造技术可行性方案分析
数据库
engchina4 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina4 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j
尘浮生4 小时前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
威哥爱编程4 小时前
SQL Server 数据太多如何优化
数据库·sql·sqlserver