• 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连接数据库

    1. // 安装mongoose
    2. // 导入mongoose
    3. const mongoose=require('mongoose')
    4. // 连接mongodb服务
    5. mongoose.connect('mongodb://127.0.0.1:27017/bilibili')
    6. // 设置回调 once一次 事件回调函数只执行一次,当mongodb服务关闭再重启时,就不会再执行回调函数,而on仍会执行回调函数
    7. mongoose.connection.once('open',()=>{
    8. console.log('连接成功')
    9. })//设置连接成功的回调
    10. mongoose.connection.on('error',()=>{
    11. console.log('连接失败')
    12. })//设置连接错误的回调
    13. mongoose.connection.once('close',()=>{
    14. console.log('连接关闭')
    15. })//设置连接关闭的回调
    16. // 关闭mongodb的连接
    17. setTimeout(()=>{
    18. mongoose.disconnect()
    19. },2000)

    Mongoose 插入文档

    1. // 安装mongoose
    2. // 导入mongoose
    3. const mongoose=require('mongoose')
    4. // 连接mongodb服务
    5. mongoose.connect('mongodb://127.0.0.1:27017/bilibili')
    6. // 设置回调 once一次 事件回调函数只执行一次,当mongodb服务关闭再重启时,就不会再执行回调函数,而on仍会执行回调函数
    7. //设置连接成功的回调
    8. mongoose.connection.once('open',()=>{
    9. // 创建文档的结构对象
    10. // 设置集合中文档的属性以及属性值的类型
    11. let BookSchema=new mongoose.Schema({
    12. name:String,
    13. author:String,
    14. price:Number
    15. })
    16. // 创建模型对象,对文档操作的封装对象,该对象可以完成文档的增删改查操作
    17. let BookModel=mongoose.model('books',BookSchema)//第一个参数集合名称,第二个参数结构对象
    18. // 新增
    19. BookModel.create({
    20. name:'西游记',
    21. author:'吴承恩',
    22. price:19.9
    23. }).then((err,data)=>{
    24. // 判断是否有错误
    25. if(err){
    26. console.log(err)
    27. return
    28. }
    29. // 如果没有出错,则输出插入后的文档对象
    30. console.log(data)
    31. // 关闭数据库连接
    32. mongoose.disconnect()
    33. })
    34. })
    35. //设置连接错误的回调
    36. mongoose.connection.on('error',()=>{
    37. console.log('连接失败')
    38. })
    39. //设置连接关闭的回调
    40. mongoose.connection.once('close',()=>{
    41. console.log('连接关闭')
    42. })

    Mongoose字段类型

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

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

    字段值验证

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

    必填项

    1. title:{
    2. type:String,
    3. required:true//设置必填项
    4. }

    默认值

    1. author:{
    2. type:String,
    3. default:'匿名'//默认值
    4. }

    枚举值

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

    唯一值

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

    mongoose删除文档

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

    1. // 删除一条
    2. BookModel.deleteOne({_id:'sfdhnaifh'}).then((err,data)=>{
    3. if(err){
    4. console.log('删除失败')
    5. return
    6. }
    7. console.log(data)
    8. })
    9. // 批量删除
    10. BookModel.deleteMany({is_hot:false}).then((err,data)=>{
    11. if(err){
    12. console.log('删除失败')
    13. return
    14. }
    15. console.log(data)
    16. })

    Mongoose更新文档

    1. // 更新文档 一条 参数 条件 修改内容
    2. BookModel.updateOne({name:'红楼梦'},{price:9.9}).then((err,data)=>{
    3. // 判断err
    4. if(err){
    5. console.log('更新失败')
    6. return
    7. }
    8. console.log(data)
    9. })
    10. BookModel.updateMany({author:'余华'},{is_hot:true}).then((err,data)=>{
    11. // 判断err
    12. if(err){
    13. console.log('更新失败')
    14. return
    15. }
    16. console.log(data)
    17. })

    Mongoose读取文档

    1. // 读取单条
    2. BookModel.findOne({name:'狂飙'}).then((err,data)=>{
    3. if(err){
    4. console.log('读取失败')
    5. return
    6. }
    7. console.log(data)
    8. })
    9. // 根据id获取文档
    10. BookModel.findById('afjhkkfa').then((err,data)=>{
    11. if(err){
    12. console.log('读取失败')
    13. return
    14. }
    15. console.log(data)
    16. })
    17. // 批量获取
    18. BookModel.find({author:'余华'}).then((err,data)=>{
    19. if(err){
    20. console.log('读取失败')
    21. return
    22. }
    23. console.log(data)
    24. })
    25. //读取所有
    26. BookModel.find().then((err,data)=>{
    27. if(err){
    28. console.log('读取失败')
    29. return
    30. }
    31. console.log(data)
    32. })

    条件控制

    运算符

    在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. //1 要的字段 0 不要的字段
    2. BookModel.find().select({name:1,author:1}).exec((err,data)=>{
    3. if(err){
    4. console.log('查询失败')
    5. return
    6. }
    7. console.log(data)
    8. })

    数据排序

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

    数据截取

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

     图形化管理工具

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

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

  • 相关阅读:
    uniapp上传头像并裁剪图片
    安全狗| 一家云原生安全厂商的成长独白
    GDI+是什么
    PyTorch ReLU6网络层
    电商平台亚马逊国际站点获得AMAZON商品详情API接口、卖家信息、销量、价格、商品规格信息列表参数详情示例分享案例
    一个事务插入,另外一个事务更新操作,是否会更新成功?
    frp服务利用云主机docker服务实现Windows远程连接
    【文心一言大模型插件制作初体验】制作面试错题本大模型插件
    Django 聚合分组F与Q查询及choices
    Python Asyncio 之网络编程方法详解
  • 原文地址:https://blog.csdn.net/guai_guai_guai/article/details/139373567