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

        
        })
})

上一篇:ReaLTaiizor开源.NET winform控件库学习使用


下一篇:分享:vue3+OpenTiny UI+cesium 实现三维地球