视频链接:https://www.bilibili.com/video/BV18s411E78K/?spm_id_from=333.337.search-card.all.click&vd_source=9545770e4a2968c05878ffac8589ec6c
视频选集:P13— P19
1._sort和投影
//查询文档时,默认惰况是按照_id的值进行排列(升序)
db.emp.find({ });
// sort()可以用来指定文档的排序的规则
// sort()需要传递一个对象来指定排序规则 1是升序,-1是降序
db.emp.find({ }).sort ();
比如:db.emp.find({}).sort({sal:1});
//sort()还可以多个条件排序
比如:db.emp.find({}).sort({sal:1,empno:-1});
// limit skip sort 可以以任意的顺序进行调用
//在查询时,可以在第二个参数的位置来设置查询结果的 投影【1表示显示,0表示不显示】
db.emp.find({},{ename:1,_id:0});
2.mongoose简介
- 之前我们都是通过shell来完成对数据库的各种操作的,在开发中大部分时候我们都需要通过程序来完成对数据库的操作。
- 而Mongoose就是一个让我们可以通过Node来操作MongoDB的模块。
- Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进─步的优化封装,并提供了更多的功能。
- 在大多数情况下,它被用来把结构化的模式应用到一个MongoDB集合,并提供了验证和类型转换等好处
2.1 mongoose的好处
- 可以为文档创建一个模式结构( Schema )
- 可以对模型中的对象/又档进行验证
- 数据可以通过类型转换转换为对象模型
- 可以使用中间件来应用业务逻辑挂钩
- 比Node原生的MongoDB驱动更容易
2.2 新的对象
mongoose中为我们提供了几个新的对象
- Schema(模式对象)
.Schema对象定义约束了数据库中的文档结构 - Model
Model对象作为集合中的所有文档的表示,相当于MongoDB数据库中的集合collection - Document
Document表示集合中的具体文档,相当于集合中的一个具体的文档
注意:先创建Schema,再创建Model,最后创建Document
2.3 步骤描述
1.先下载安装mongoose
2.在项目中引入mongoose
var mongoose = require("mongoose ");
3.连接MongoDB数据库
mongoose.connection( ‘mongodb://数据库的ip地址:端口号/数据库名’,{useMongoClient:true})
注意:如果端口号是默认端口号(27017)则可以省略不写
4.断开数据库连接(一般不需要)
MongoDB数据库,一般情况下,只需要连接一次,连接一次以后,除非项目停止服务器关闭,否则连接一般不会断开
mongoose.disconnect ( )
非必要步骤:监听MongoDB数据库的连接状态
在mongoose对象中,有一个属性叫做connection,该对象表示的就是数据库连接通过监视该对象的状态,可以来监听数据库的连接与断开
mongoose.connection.once (“open” ,function (){});//数据库连接成功的事件
mongoose.connection.once (“close”, function (){});//数据库断开的事件
2.4 具体步骤代码实现
引入+连接数据库
3.Schema和Model
mongoose官网:mongoosejs.com
先进行数据库的连接
3.1 创建Schema
3.2 创建Model
注意:mongoose会自动将集合名字变为复数,比如student变为students
3.3 插入文档
展示:
4.Model的方法
有了Model,就可以来对数据库进行增删改查的操作
4.1 Model.create
效果:
arguments参数:
4.2 Model.find && Model.findById && Model.findOne
4.2.1 Model.find
通过find()查询的结果,返回的对象,就是Document,文档对象【Document对象是Model的实例】
查找:
注意:无论是否查到,都会返回一个数组【没查到就返回一个空数组】
projection传值情况:
还可以写成字符串:
注意:
options传值情况:
检查doc是否是集合的实例:
4.2.2 Model.findOne
查询符合条件的第一个文档,总会返回一个具体的文档对象
4.2.3 Model.findById
4.3 Model.update
Model.replaceOne和上面的一样的
4.4 Model.remove && Model.deleteOne && Model.deleteMany
4.5 Model.count
5.Document的方法
Document和集合中的文档一一对应,Document是Model的实例,通过Model查询到结果都是Document
单独创建一个document:
插入数据库:
展示:
5.1 update
更直接的改法:
5.2 remove
5.3 get、set、id
5.4 toObject
将Document对象转换为一个普通的JS对象【转换为普通的js对象以后,注意所有的Document对象的方法或属性都不能使用了】
想删除文档中的属性,必须先转为JS对象才能删除:
6.mongoose的模块化
连接数据库操作只需要一次就行,所以定义模块来进行连接
再定义一个模块:
再定义一个文件,直接调用上面的模块: