【mongoose】mongoose 基本使用

1. 连接数据库

// 1. 安装 mongoose
// 2. 导入 mongoose
const mongoose = require('mongoose')
// 3. 连接 mongodb 服务
mongoose.connect('mongodb://127.0.0.1:27017/xx_project')
// 4. 设置回调   .on 一直重复连接  .once 只连接一次
mongoose.connection.on('open', () => {// console.log('数据库连接成功')// 5. 创建类型约束模型对象let BookSchema = new mongoose.Schema({name: String,author: String,price: Number})// 6. 创建模型对象 对文档操作的封装对象let BookModel = mongoose.model('books', BookSchema)// 7. 新增BookModel.create({name: '《算法导论》',author: 'Thomas H.Cormen',price: 100}).then(data => {console.log(data)// 8. 关闭数据库连接(项目运行时不添加该代码)mongoose.disconnect()}).catch(err => {console.log(err)// 8. 关闭数据库连接(项目运行时不添加该代码)mongoose.disconnect()})
})
mongoose.connection.on('error', () => {console.log('数据库连接失败')
})
mongoose.connection.on('close', () => {console.log('数据库连接关闭')
})

2. 增删改查

2.1 增加

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

BookModel.create({name: '《算法导论》',author: 'Thomas H.Cormen',price: 100}).then(data => {console.log(data)// 8. 关闭数据库连接(项目运行时不添加该代码)mongoose.disconnect()}).catch(err => {console.log(err)// 8. 关闭数据库连接(项目运行时不添加该代码)mongoose.disconnect()})
  BookModel.insertMany([{name: '《算法导论》',author: 'Thomas H.Cormen',price: 100},{name: '《数据结构与算法分析》',author: 'Mark Allen Weis',price: 100}])

2.2 删除

BookModel.deleteOne({ _id: '6548d59fe5c1c46771893963' })
BookModel.deleteMany({author:'Jay'})

2.3 更新

BookModel.updateOne({name: '《算法》'
}, {$set: {price: 100000}
})
BookModel.updateMany({author: 'Leehom Wang'}, {author: '王力宏'})

2.4 查询

SongModel.findOne({author: '王力宏'})
SongModel.findById('5dd662b5381fc316b44ce167')
SongModel.find()
SongModel.find({author: '王力宏'})

3. 字段设置

在这里插入图片描述

title: {type: String,required: true,  // 必填default: '匿名'  // 默认值
}gender: {type: String,enum: ['male', 'female']  // 枚举值
},
username: {type: String,unique: true  // 唯一值
},

4. 条件控制

4.1 运算符

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

  • > 使用 $gt
  • < 使用 $lt
  • >= 使用 $gte
  • <= 使用 $lte
  • !== 使用 $ne
BookModel.find({id:{$gt:3}}); // id号比3大的所有的记录

4.2 逻辑运算

$or 逻辑或的情况

BookModel.find({$or:[{age:18},{age:24}]});

$and 逻辑与的情况

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

4.3 正则匹配

BookModel.find({name :/you/})

5. 个性化读取

方法可以链式调用。

5.1 字段筛选

1:显示
0:不显示

BookModel.find().select({name: 1, author: 1, _id: 0}).exec()
.then(data=> {console.log(data)
}).catch(err=> {console.log(err)
})

5.2 数据排序

1:升序
-1:倒序

BookModel.find().sort({price: 1}).exec()
.then(data=> {console.log(data)
}).catch(err=> {console.log(err)
})

5.3 数据截取

返回开始三个对象:

BookModel.find().sort({price: 1}).limit(3).exec()
.then(data=> {console.log(data)
}).catch(err=> {console.log(err)
})

取出第四到六个:

BookModel.find().sort({ price: 1 }).skip(3).limit(3).exec()
.then(data => {console.log(data)
}).catch(err => {console.log(err)
})

6. 代码模块化


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/162413.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F4X SDIO(六) 例程讲解-SD_PowerON

STM32F4X SDIO&#xff08;六&#xff09; 例程讲解-SD_PowerON 例程讲解-SD_PowerONSDIO引脚初始化和时钟初始化SDIO初始化(单线模式)CMD0:GO_IDLE_STATE命令发送程序命令响应程序 CMD8:SEND_IF_CONDCMD8参数命令发送程序命令响应程序 CMD55:APP_CMDCMD55命令参数命令发送命令…

jQuery类库

文章目录 jQuery介绍jQuery优势jQuery内容jQuery版本jQuery对象知识补充js代码与jQuery代码对比标签对象与jQuery对象 jQuery 查找标签1.基本选择器2.组合选择器3.层级选择器4.属性选择器5.基本筛选器6.表单筛选器7.筛选器方法 jQuery的链式操作Python链式操作的本质 操作标签1…

【框架篇】统一数据格式返回

✅作者简介&#xff1a;大家好&#xff0c;我是小杨 &#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 1&#xff0c;统一数据格式返回的介绍 统一数据返回是指在进行接口开发时对返回数据进行规范和统…

【C语言初学者周冲刺计划】4.3根据输入的行数输出一下图案

目录 1题目&#xff1a; 2解题思路&#xff1a; 3代码&#xff1a; 4运行代码&#xff1a; 5总结&#xff1a; 1题目&#xff1a; 2解题思路&#xff1a; 首先分析题干要求&#xff0c;然后找规律&#xff0c;发现前面空格与行数的规律和A,B递推的规律&#xff0c;然后写代…

java基础练习(使用java实现跨库数据调度ETL)

简介 本文写一篇关于java库与库之间的数据传输&#xff0c;现实生产中可能是通过其他方式完成&#xff0c;在没有架构的基础上使用java实现跨库的数据传送&#xff0c;非常不便利。但是作为练习我觉得确实非常有用&#xff0c;涉及的java知识点相对较多。本文以一个实列讲解&am…

船舶IMO识别码是什么?

船舶编码和编码体系比较多&#xff0c;主要有船舶登记号、船检登记号、船舶呼号、IMO号、船舶MMSI、船体号等。 船舶的IMO Number&#xff08;国际海事组织识别码&#xff0c;下称IMO识别码&#xff09;是独一无二的&#xff0c;相当于船舶的身份证号码&#xff0c;并且此号码…

【Windows】解决电脑可以正常使用微信,但是打不开网页

问题 啊哈 如题&#xff0c;在安装软件的过程中突然就发现浏览器不能用了&#xff0c;但是微信可以正常接发消息。 记录一下解决过程。 解决 1、自动DNS 打开控制面板->网络和Internet->网络和共享中心&#xff0c;点击以太网&#xff0c;找到属性Internet协议4(TCP/…

【聚沙成塔系列】通信笔记知识汇总一

什么是NCO 载波NCO通过控制频率w控制。每次要累加的数字M就是频率控制字。调节M进而控制载波频率。 什么是带宽 3db带宽 常说的3dB带宽&#xff0c;是指在信号功率谱对称的情况下&#xff0c;功率谱密度比信号频谱中心处的峰值下降3dB的两个频率之间的频率范围 工作带宽 工作…

docker部署mysql nginx redis

一.创建网络 # 创建网络 docker network create liming # 查看网络 docker network ls二.部署mysql 删除并重新创建mysql容器&#xff0c;并完成本地目录挂载&#xff1a; 挂载/software/mysql/data到容器内的/var/lib/mysql目录挂载/software/mysql/init到容器内的/docker-…

html将复选框变为圆形样例

html将复选框变为圆形样例 说明目录使用对勾图标实现圆形复选框原复选框html代码及默认样式取消复选框未勾选前的样式新增复选框未勾选前的样式新增复选框勾选后的样式获取复选框选中后的value值 使用CSS样式写对勾图标实现圆形复选框 说明 这里记录下用原生html实现将原复选框…

netty基本用法, 拆包、粘包等常见解决方案,看本文即可,不做原理说明,只进行实战操作

netty的基本用法 完整的介绍了netty最基本的发送byte、string、byteBuf发送接收数据&#xff0c;以及拆包、粘包演示&#xff0c;拆包、粘包的解决方案。看netty的用法只看本篇足以&#xff0c;本篇只说用法&#xff0c;不讲底层原理。 详细demo的git地址 示例的通用代码 客…

【JVM】JDBC案例打破双亲委派机制

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JVM 打破双亲委派机制&#xff08;JDBC案例…