• MongoDB数据库的基本操作


    一、使用async/await对CRUD进行封装

    1、定义dao层:数据库访问层。专门用于访问数据库,不和接口直接联系

    2、定义service层:服务层。通过调用dao层的方法来获取数据,将结果通过res对象响应给客户端

    3、路由接口:功能简化。只负责请求地址的路由

    4、案例:模型的创建—->dao层定义—->service层定义—->路由文件的定义

    ​ (1)定义dao层:DataBase Option —- 数据库访问层(操作数据库)

    ​ a、定义模型:实现ORM映射。course(cid,cname,cgrade)

    ​ b、定义操作:通过模型对数据库进行访问

    ​ (2)定义服务层:

    ​ a、与客户端进行交互

    ​ b、通过dao层访问数据库

    ​ (3)接口:根据客户的请求路径,路由的对应的服务

    二、MongoDB数据库

    1、NoSQL数据库:非关系型数据库。数据的组织形式不是二维表格。即Not Only SQL,不能使用SQL语句操作数据。适合存储超大

    规模、数据长度不确定的数据,数据没有规定的格式,不需要进行任何的设置就可以自由的横向扩展

    2、什么是MongoDB:是用C++编写的,用于分布式系统的数据存储。存储数据的格式是 key : value

    ​ 数据库:database

    ​ 数据表(table) <—— > collection(集合)

    ​ 行(row) <———> document(文档)

    3、MongoDB的数据类型:

    ​ ObjectId:类似唯一主键,长度为12个字节,通常用于生成文档的_id值

    强调:在MongoDB中,每个文档都有一个 _id属性,若用户在创建文档时没有给出 _id ,MongDB会用ObjectId来为 _id生成一个,

    _id的值是唯一的,用来唯一标识一个文档(一条记录)

    4、MongoDB的基本操作

    1. // 1.数据库的切换:use 数据库名
    2. use my_test
    3. // 2.创建集合:db.集合名.insert({_id:'1001'}) --- 在向集合中插入文档时就已经创建了集合
    4. db.admin.insert({
    5. _id:'1005',
    6. userName: '鲁肃',
    7. password: '123456',
    8. address: '镇江'
    9. })
    10. db.student.insert({
    11. _id:'s101',
    12. sname: '张三',
    13. ssex: '男',
    14. sage: 21
    15. })
    16. // 3.查询集合:db.集合名.find({}) --- 若find不带参数表示查询所有文档
    17. db.admin.find()
    18. // 4. 统计集合中文档的数量 :db.集合名.find().count()
    19. db.admin.find().count()
    20. // 5.更新集合中的文档:db.集合名.update({条件},{$set:{key:value}})
    21. db.admin.update({_id:'1004'},{$set:{password:'aaaa'}})
    22. // 6. 删除属性(key):db.集合名.update({条件},{$unset:{key:value}}
    23. db.admin.update({_id:'1003'},{$unset:{address:'南京'}})
    24. // 7. 增加属性:db.集合名.update({条件},{$set:{key:value}}
    25. db.admin.update({_id:'1003'},{$set:{hobby:['下棋','骑马','KTV']}})
    26. // 8. 删除文档:db.集合名.remove({条件})
    27. db.admin.remove({_id:'1005'})
    28. db.student.find()
    29. //9. 删除集合:db.集合名.drop()
    30. db.student.drop()

    5、MongoDB的查询

    1. //创建一个数组:保存若干对象
    2. var arr = []
    3. for(let i=1;i<=2000;i++)
    4. {
    5. arr.push({
    6. _id:'100'+i,
    7. title: 'A0'+i,
    8. num: i
    9. })
    10. }
    11. //将数组arr中的元素插入到集合numbers中
    12. db.numbers.insert(arr)
    13. db.numbers.find()
    14. // 10. 查询numbers集合中num值等于500的文档(记录)
    15. db.numbers.find({num:500})
    16. // 11. 查询numbers集合中num值大于500的文档
    17. db.numbers.find({num:{$gt:500}})
    18. // 12. 查询numbers集合中num值小于500的文档
    19. db.numbers.find({num:{$lt:500}})
    20. // 13. 查询numbers集合中num值小于40,小于50的文档
    21. db.numbers.find({num:{$gt:40,$lt:50}})
    22. //14. 用limit设置显示数据的上限
    23. db.numbers.find().limit(15) //表示最多显示15条记录
    24. //15. 分页显示:skip(index)---进行定位
    25. db.numbers.find().skip(0).limit(10) //从索引为0的记录开始连续显示10条记录
    26. db.numbers.find().skip(10).limit(10)
    27. db.numbers.find().skip(20).limit(10)

  • 相关阅读:
    数据挖掘——关联规则理论部分
    vue-simple-uploader 上传文件并预览
    钉钉自动打卡
    “五之链”第十六期沙龙活动在呆马科技成功举办
    22071驱动day1
    debian 修改镜像源为阿里云【详细步骤】
    ​LeetCode解法汇总56. 合并区间
    一对一,屏对屏,菊风远程同屏解决方案,助力多行业实现数字化协同
    LabVIEW使用 NI Package Manager(NIPM)修复软件
    【每日一题Day37】LC795区间子数组的个数 | 单调栈 模拟
  • 原文地址:https://blog.csdn.net/m0_74331185/article/details/128103380