给一个网站,网站定制开发与模版,西班牙外贸网站,怎么搜索网站写在最前#xff1a;跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识#xff0c;需要格外注重实战和官方技术文档#xff0c;文档建议作为手册使用 系列文章
【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - n… 写在最前跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识需要格外注重实战和官方技术文档文档建议作为手册使用 系列文章
【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - npm【Node.js】笔记整理 4 - node版本管理工具 nvm【Node.js】笔记整理 5 - Express框架简单入门【Node.js】笔记整理 6 - MongoDB【Node.js】笔记整理 7 - mongoose 本文目录 系列文章Mongoose —— 文档对象模型库连接数据库数据字段文档CRUD条件控制1、运算符2、逻辑运算 3、正则匹配 个性化读取1、字段筛选2、数据排序3、数据截取 模块化 Mongoose —— 文档对象模型库
官网地址
mongoose提供了可使用代码简便操作数据库的能力 注意自己的mongoose版本高版本的API写法有差异已官方文档对应版本的为主 连接数据库
1、安装
npm install mongoose2、导入并使用
// 导入
const mongoose require(mongoose)// 设置 strictQuery 为 true
mongoose.set(strictQuery, true)// 链接MongoDB数据库
mongoose.connect(数据库URL) // eg: mongodb://ip地址:port//数据库名称// 设置连接状态回调
mongoose.connection.once(open, () {// 连接成功回调// 一切始于Schema - 文档结构对象在连接成功时候创建 其中定义了该集合中文档中的属性及其类型let bookSchema new mongoose.Schema({name: String,author: String,price: Number})// 创建模型对象 —— 对文档操作的封装对象, 借此可完成对文档的crud操作, 第一个参数是要操作的集合名称, 第二个参数是结构对象let bookModel mongoose.model(books, bookSchema)bookModel.create({name: ,author: ,price: 1}, (err, data) {// 创建完毕的回调if(err){// 插入出错的操作...}if(data){// 插入成功的操作...}})
})mongoose.connection.on(error, () {// 连接错误回调
})mongoose.connection.once(close, () {// 连接关闭回调
})// 关闭MongoDB连接
mongoose.disconnect()数据字段
1、字段类型
类型描述String字符串Number数字Boolean布尔值Array数组可以用[]标识Date日期BufferBuffer对象Mixed任意类型需要使用mogoose.Schema.Types.Mixed指定ObjectId文档对象id 需要使用mongoose.Schema.Types.ObjectId指定Decimal128高精度数字需要使用mongoose.Schema.Types.Decimal128指定
2、字段验证
在创建Schema时每一个属性使用对象声明并在其中标注其类型、是否必需、默认值、值的范围等
示例
mongoose.connection.once(open, () {// 连接成功回调// 一切始于Schema - 文档结构对象在连接成功时候创建 其中定义了该集合中文档中的属性及其类型let bookSchema new mongoose.Schema({name: {type: String,required: true,unique: true // 唯一值该值必须在文档中独一无二},author: {type: String,required: true,enum: [Jay, Van]},price: {type: Number,default: 450}})
})文档CRUD 进行文档操作的前提是mongoose.model创建成功 mongoose会使用集合名称的复数来创建集合 也就是说写user创建出来的是users 1、新增集合 - bookModel.insertMany() bookModel.insertMany([{name: ,// ...
}])bookModel.create({// ...
})2、删除一条数据 - bookModel.deleteOne() bookModel.deleteOne({_id: xxx}, (err, data) {// ...
})3、批量删除 - bookModeldeleteMany bookModel.deleteMany({xxx: yyy}, (err, data) {// ...
})4、更新文档 - bookModel.updateOne()、bookModel.updateMany() bookModel.updateOne({被更新的数据项标识: xxx}, {更新的属性: 新的值}, (err, data) {// ...
})// 批量更新, 其实跟更新一条差不多只是标识要变成可以锁定多个数据项的标识5、读取文档 - bookModel.find()、bookModel.findOne()、bookModel.findById() bookModel.find({key: value}, (err, data) {// ...
})bookModel.findOne({key: value}, (err, data) {// ...
})bookModel.findById(id, (err, data) {// ...
})条件控制
1、运算符
mongoose中不能使用、!这种运算符需要使用替代符号
mongoose运算符含义$gt$lt$gte$lte$ne!
语法 { key: {运算符: value} }
示例:
db.students.find({ age: {$gt: 18} }, (err, data) {}) // 查询age大于18的所有学生的记录2、逻辑运算
也需要使用替代符号表示、|等
mongoose逻辑运算符含义$or|$and
语法{ 逻辑运算符: [ {条件1}, {条件2} ] }
示例
db.students.find({ $or: [{ sex: 男 }, { sex: 女 }] }, (err, data) {}) // 逻辑或
db.students.find({ $and: [{ age: { $gt: 18} }, { age: { $lt: 23 } }] }, (err, data) {})3、正则匹配
在条件中可以直接使用JS中的正则语法进行模糊查询
db.students.find({ name: /俊/ }, (err, data) {})个性化读取
支持链式调用对查找到的结果进行一些处理并在最后使用.exec((err, data) {})设置回调函数
1、字段筛选
字段筛选中1表示保留该字段 0表示不需要该字段
// 使用 select() 选择需要读取的值并将其属性设置为1
bookModel.find().select({_id: 0, title: 1}).exec((err, data) {if(err) throw err;// ...mongoose.connection.close()
})2、数据排序
sort排序中某个属性的值可以使用1或者-1标识1表示升序 -1表示降序
// 按照热度值升序排序
bookModel.find().sort({ hot: 1 }).exec((err, data) {if(err) throw err;// ...mongoose.connection.close()
})3、数据截取
两个API skip( value ) - 跳过前value个值、limit( value ) - 限定结果中只包含value个值
可以通过这种方式进行分页查询
bookModel.find().skip(value).limit(value).exec((err, data) {if(err) throw err;// ...mongoose.connection.close()
})模块化
使用module.exports xxx对外暴露一些方法然后在需要的地方使用require(./ss/xx)引入