Mongodb数据库

 Mongodb

Mongodb是一个基于分布式文件存储的数据库,官方地址:https://www.mongodb.com/

Mongodb操作语法与JavaScript类似,容易上手

核心概念

  • 数据库:数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存放很多集合
  • 集合:集合类似于JS中的数组,在集合中可以存放很多文档
  • 文档:文档是数据库中的最小单位,类似于JS中的对象

可以通过JSON文件来理解Mongodb中的概念

  • 一个JSON文件就好比是一个数据库,一个Mongodb服务下可以有n个数据库
  • JSON文件中的一级属性的数组值好比是集合
  • 数组中的对象好比是文档
  • 对象中的属性有时也称之为字段

一般情况下,一个项目使用一个数据库,一个集合会存储同一种类型的数据 

下载安装和启动

下载地址:https://www.mongodb.com/try/download/community

数据库命令

  • 显示所有的数据库

show dbs

 

  • 切换到指定的数据库,如果数据库不存在会自动创建数据库

use 数据库名

  • 显示当前所在的数据库

db

  • 删除当前数据库

use 库名

dbs.dropDatabase()

 集合命令

  • 创建集合

db.createCollection('集合名称')

  • 显示当前数据库中的所有集合

show collections

  • 删除某个集合

db.集合名.drop()

  • 重命名集合

db.集合名.renameCollection('newname')

文档命令

  • 插入文档

db.集合名.insert(文档对象)

  • 查询文档

db.集合名.find(查询条件)

_id是mongodb自动生成的唯一编号,用来唯一标识文档

  • 更新文档

db.集合名.update(查询条件,新的文档)

db.集合名.update({name:'张三'},{$set:{age:19}})//更改局部信息

  • 删除文档

db.集合名.remove(查询条件)

 数据库操作应用场景

新增

用户注册

发布视频

发布商品

发朋友圈

发评论

发微博...

删除

删除评论

删除商品

删除文章

删除视频

删除微博...

更新

更新个人信息

修改商品价格

修改文章内容

查询

商品列表

视频列表

朋友圈列表

微博列表...

Mongoose

Mongoose是一个对象文档模型库,官网http://www.mongoosejs.net/

作用:方便使用代码操作mongodb数据库

用Mongoose连接数据库

// 安装mongoose
// 导入mongoose
const mongoose=require('mongoose')
// 连接mongodb服务
mongoose.connect('mongodb://127.0.0.1:27017/bilibili')
// 设置回调 once一次 事件回调函数只执行一次,当mongodb服务关闭再重启时,就不会再执行回调函数,而on仍会执行回调函数
mongoose.connection.once('open',()=>{
  console.log('连接成功')
})//设置连接成功的回调
mongoose.connection.on('error',()=>{
  console.log('连接失败')
})//设置连接错误的回调
mongoose.connection.once('close',()=>{
  console.log('连接关闭')
})//设置连接关闭的回调
// 关闭mongodb的连接
setTimeout(()=>{
  mongoose.disconnect()
},2000)

Mongoose 插入文档

// 安装mongoose
// 导入mongoose
const mongoose=require('mongoose')
// 连接mongodb服务
mongoose.connect('mongodb://127.0.0.1:27017/bilibili')
// 设置回调 once一次 事件回调函数只执行一次,当mongodb服务关闭再重启时,就不会再执行回调函数,而on仍会执行回调函数
//设置连接成功的回调
mongoose.connection.once('open',()=>{
  //  创建文档的结构对象
  // 设置集合中文档的属性以及属性值的类型
  let BookSchema=new mongoose.Schema({
    name:String,
    author:String,
    price:Number
  })
  // 创建模型对象,对文档操作的封装对象,该对象可以完成文档的增删改查操作
  let BookModel=mongoose.model('books',BookSchema)//第一个参数集合名称,第二个参数结构对象
  // 新增
  BookModel.create({
    name:'西游记',
    author:'吴承恩',
    price:19.9
  }).then((err,data)=>{
    // 判断是否有错误
    if(err){
      console.log(err)
      return
    }
    // 如果没有出错,则输出插入后的文档对象
    console.log(data)
    // 关闭数据库连接
    mongoose.disconnect()
  })
})
//设置连接错误的回调
mongoose.connection.on('error',()=>{
  console.log('连接失败')
})
//设置连接关闭的回调
mongoose.connection.once('close',()=>{
  console.log('连接关闭')
})

Mongoose字段类型

文档结构可选的常用字段类型列表

类型描述
String字符串
Number数字
Boolean布尔值
Array数组,也可以使用[]标识
Date日期
BufferBuffer对象
Mixed任意类型,需要使用mongoose.Schema.Types.Mixed指定
Objected对象ID,需要使用mongoose.Schema.Types.ObjectId指定
Decimal128高精度数字,需要使用mongoose.Schema.Types.Decimal128指定

字段值验证

Mongoose有一些内建验证器,可以对字段值进行验证

必填项

title:{
    type:String,
    required:true//设置必填项
}

默认值

author:{
    type:String,
    default:'匿名'//默认值
}

枚举值

gender:{
    type:String,
    enum:['男','女']//设置的值必须是数组中的
}

唯一值

username:{
    type:String,
    unique:true//unique在重建集合的情况下才能使用
}

mongoose删除文档

mongoose会使用集合名称的复数,创建集合

  // 删除一条
  BookModel.deleteOne({_id:'sfdhnaifh'}).then((err,data)=>{
    if(err){
      console.log('删除失败')
      return
    }
    console.log(data)
  })
  // 批量删除
  BookModel.deleteMany({is_hot:false}).then((err,data)=>{
    if(err){
      console.log('删除失败')
      return
    }
    console.log(data)
  })

Mongoose更新文档

// 更新文档 一条 参数 条件 修改内容
BookModel.updateOne({name:'红楼梦'},{price:9.9}).then((err,data)=>{
  // 判断err
  if(err){
    console.log('更新失败')
    return
  }
  console.log(data)
})
BookModel.updateMany({author:'余华'},{is_hot:true}).then((err,data)=>{
  // 判断err
  if(err){
    console.log('更新失败')
    return
  }
  console.log(data)
})

Mongoose读取文档

// 读取单条
BookModel.findOne({name:'狂飙'}).then((err,data)=>{
  if(err){
    console.log('读取失败')
    return
  }
  console.log(data)
})
// 根据id获取文档
BookModel.findById('afjhkkfa').then((err,data)=>{
  if(err){
    console.log('读取失败')
    return
  }
  console.log(data)
})
// 批量获取
BookModel.find({author:'余华'}).then((err,data)=>{
  if(err){
    console.log('读取失败')
    return
  }
  console.log(data)
})
//读取所有
BookModel.find().then((err,data)=>{
  if(err){
    console.log('读取失败')
    return
  }
  console.log(data)
})

条件控制

运算符

在monfodb不能> < >= <= !==等运算符,需要使用替代符号

  • > $gt
  • < $lt
  • >= $gte
  • <= $lte
  • !== $ne

db.students.find({id:{$gt:3}}); id号比3还大的所有的记录

 逻辑运算

$or 逻辑或的情况

db.students.find({$or:[{age:18},{age:24}]})

 $and 逻辑与的情况

db.students.find({$and:[{age:{$lt: 20}},{age:{$gt:15}}]});

正则匹配 

条件中可以使用JS的正则语法,通过正则可以进行模糊查询

db.students.find({name:/missyou/});

 mongoose个性化读取

字段筛选

//1 要的字段 0 不要的字段 
BookModel.find().select({name:1,author:1}).exec((err,data)=>{
  if(err){
    console.log('查询失败')
    return
  }
  console.log(data)
})

数据排序

//1 升序 -1 降序
BookModel.find().select({name:1,price:1,_id:0}).sort({price:1}).exec((err,data)=>{
  if(err){
    console.log('查询失败')
    return
  }
  console.log(data)
})

数据截取

//skip 跳过 limit 限定 从高到低排序,(跳过三个之后)取出前三
BookModel.find().select({name:1,price:1,_id:0}).sort({price:1}).skip(3).limit(3).exec((err,data)=>{
  if(err){
    console.log('查询失败')
    return
  }
  console.log(data)
})

 图形化管理工具

我们可以使用图形化的管理工具来对Mongodb进行交互

Robo 3T 免费 https://github.com/Studio3T/robomongo/releases

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值