前端需掌握的MongoDB数据库

数据库概念

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。

所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

数据库介绍

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bE1gEsPX-1616134455851)(MongoDB数据库.assets/image-20210303220245802.png)]

  • 存储数据的仓库,独立于语言之外的软件,可以通过api去操作它
  • 生活中
    • 通过仓库来存放物品,每个仓库有N个架子, 每个架子有N个物品
  • 在程序中
    • 通过数据库来存放数据, 每个数据库有N个表/集合,每个表/集合有N个数据/文档

数据库种类

  • 关系型数据库
  1. 遵循统一的SQL标准,语法大同小异
  2. 有库和表的约束等
  • Oracle、 MySql、 SQLite、 SQL Server等

  • 非关系型数据库(Not Only SQL)

  1. 没有统一的标准
  2. 一般以键值对形式存储
  3. 读取速度更快
  • Mongodb(文档)、Redis/Memcache(内存)

为什么使用数据库

  1. 动态网站的数据都存储于数据库中
  2. 可以持久存储客户端通过表单收集的用户信息
  3. 可以对数据进行高效的管理

MongoDB中的相关术语

  • database: 数据库,mongodb中可以建立多个数据库

  • collection:集合,一组数据的集合,可以理解为js中的数组

  • document:文档,一条具体的数据, 可以理解为js中的对象

  • field:字段,可以理解为js中的对象属性

field —> document —> collection —> database

目标

  1. 存放项目数据
  2. 实战工作中可以独立写api接口

MongoDB安装步骤

  • linux环境
  1. 下载mongodb(linux)安装包(通过winScp工具将安装包从window移动到linux)

  2. 远程工具连接linux(putty等)

  3. 移动到安装包的目录解压安装包

    tar -zxvf mongodb-linux-x86_64-xxxxx.tgz
    
  4. 将解压包移动到指定目录

    mv mongodb-linux-x86_64-xxxx/ /user/local/mongodb
    
  5. 创建数据存放目录与日志存放目录

    mkdir -p /user/local/mongodb/data /user/local/mongodb/logs
    
  6. 启动MongoDB服务

    /user/local/mongodb/bin/mongod --dbpath=/user/local/mongodb/data --logpath=/user/local/mongodb/logs/mongodb.log --logappend --port=27017 --fork
    
  7. 后期登录即可

    /user/local/mongodb/bin/mongo
    
  • window环境
  1. 下载mongodb(window)安装包并解压

  2. 创建服务(dos命令窗口中移动至安装包的安装路径)

    bin/mongod.exe --install --dbpath 磁盘路径 --logpath 日志路径
    
  3. 启动服务(在mongodb的bin目录 **=》 以管理员身份运行)

    net start mongodbnet stop mongodb
    
  4. 登录(在mongodb的bin目录 ****》 也可以直接配置环境变量)

    mongo
    

MongoDB基本操作

查看数据库

show databases

选择数据库

use 数据库名

注意:在mongodb中选择不存在的数据库时不会报错**(隐式创建)**,当这个数据库中有内容后会展示

查看当前选择的数据库

db

删除数据库

db.dropDatabase()

删除当前选择的数据库

查看集合

show collections

创建集合

db.createCollection('集合名')

注意: 后期插入数据都是隐式创建集合

删除集合

db.xxx.drop()

mongodb文档增删改查

数据库主要用来存放项目数据, 数据库和集合的创建完成之后需要对文档(数据)进行增删改查

插入文档
  • 语法
  db.集合名.insert(json数据)

集合若存在,则直接插入数据,若集合不存在,则隐式创建

  • 练习:在test2数据库的c1集合中插入数据(名字叫yuweiqi 年龄18岁)
  use test2db.c1.insert({    
      name: "yuweiqi",  
    age: 18})
  // mongodb会给每一条文档加一个全球唯一的_id键
  • 可以给每条数据自定义_id 但是强烈不推荐

  • 只要在插入数据的时候加上自定义的_id既可覆盖

  • 插入多条数据

    db.c1.insert([   
      {name: "zhangsan", age: 18}, 
        {name: "zhaosi", age: 19},
        {name: "wangwu", age: 20}]
                )// 一次性插入三条数据
  • 如何快速插入多条数据

因为mongodb底层使用的是js引擎实现的,所以支持部分js语法

因此可以写for循环

   for(var i = 0; i < 10; i++) {    
       db.c1.insert({name: "a"+ i, age: i})
   }
删除文档
  • 语法
  db.集合名.remove(条件, [,是否删除一条])是否删除一条:true 删除全部匹配的   false  删除一条(默认)
修改文档
  • 基础语法
  db.集合名.update(条件,新数据[,是否新增, 是否修改多条])是否新增: 根据条件匹配不到数据时是否插入该条数据    
  true为插入  
  false为不插入(默认)是否修改多条: 
  将匹配成功的数据都修改     
  true 是  
  false 否(默认)
  • 升级语法
  db.集合名.update(条件,{修改器:{键:值}})
修改器作用
$inc递增
$rename重命名列
$set修改列值
$unset删除列
  • 准备工作
  for(var i = 1; i <= 10; i++) {    
  db.c2.insert({uname: "zs"+i, age: i})
  }
  在test2数据库的c2集合中插入10条数据
  • 练习1:将{uname: zs1}改为{uname: zs2}
  db.c2.update({uname: "zs2"}, {$set: {uname: "zs22"} })
  • 练习2:将{uname: zs10}的年龄增加两岁或者减小两岁
  db.c2.update({uname: "zs10"}, {$inc: {age: 2} })  增加两岁db.c2.update({uname: "zs10"}, {$inc: {age: -2} }) 减小两岁
  • 练习3:插入数据: db.c2.insert({uname: “升龙教主”,age: 888, who: “男”, other:“非国人”})

    db.c2.update({uname: “升龙教主”}, {$set: {uname: “升龙大教主”} }) 修改uname的值

    db.c2.update({uname: “升龙大教主”}, {$rename: {who: “sex”} }) 修改who字段的字段名

    db.c2.update({uname: “升龙大教主”}, {$inc: {age: 111} }) age字段的值增加111

    db.c2.update({uname: “升龙大教主”}, {$unset: {other: true} }) 删除other字段

// 一次性写多个修改器
db.c2.update({uname: "升龙大教主"}, 
{    
$set: {uname: "升龙大教主"},    
$rename: {who: "sex"},    
$inc: {age: 111},    
$unset: {other: true}
}
查询文档
  • 语法
  db.集合名.find(条件[,查询的字段])
  // 
  1.条件:    
  查询所有的数据 ---> {}或者不写    
  查询 age=6 的数据 ---> {age: 6}    
  查询age=6 同时 sex = "男"的数据 ---> {age: 6, sex: "男"}   
  2.查询的字段(可选参数)       
  不写 ---> 查询符合条件数据的所有字段    
  {age: 1}  ---> 只显示符合条件数据的age字段    
  {age: 0}  ---> 不显示符合条件数据的age字段(其他字段都显示)    
  但是不管怎么写 系统自定义的_id都会显示
条件含义
$gt大于
$lt小于
$gte大于等于
$lte小于等于
$ne不等于
$in包含(查询多个)
$nin不包含
  • 练习1:查询所有的数据
  db.c1.find({})
  • 练习2:查询年龄大于5岁的数据
  db.c1.find({age: {$gt: 5} })
  • 练习3:查询年龄是5岁、8岁、10岁的数据
  db.c1.find({age: {$in: [5, 8, 10]} })
  • 练习4:只看年龄列(_id不考虑)
  db.c1.find({},{age:1})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值