mongoose学习记录
mongoose安装和连接数据库
npm i mongoose
导入mongoose
const mongoose = require('mongoose')
mongoose.set("strictQuery",true)
连接数据库
mongoose.connect('mongodb:127.0.0.1:27017/test')
设置回调
mongoose.connection.on('open',()=>{console.log("连接成功")
})mongoose.connection.on('error',()=>{console.log("连接失败")
})mongoose.connection.on('close',()=>{console.log("连接关闭")
})
setTimeout(()=>{mongoose.disconnect();
},2000)
mongoose.connection.on与mongoose.connection.once的区别在于当数据库断开时,once,回调函数不会执行,而on可以
插入文档
mongoose.connection.on('open',()=>{//5.创建文档的结构对象//设置集合中文档的属性以及属性值的类型let BookSchema =new mongoose.Schema({name:String,author:String,price:Number})//6.创建模型对象。对文档操作的封装对象let BookModel = mongoose.model('book',BookSchema) //数据库名(集合),数据库表名(结构对象)BookModel.create({name:"西游记",author:"吴承恩",price:20},(err,data)=>{if(err){console.log(err)return}console.log(data)})//项目运行过程中,不会添加该代码mongoose.disconnect();
})
字段类型
| 类型 | 描述 |
|---|---|
| String | 字符串 |
| Number | 数字 |
| Boolean | 布尔值 |
| Array | 数组,也可以用[] |
| Date | 日期 |
| Buffer | buffer对象 |
| Mixed | 任意类型,需要使用mongoose.Schema.Types.Mixed指定 |
| ObjectId | 任意类型,需要使用mongoose.Schema.Types.ObjectId指定 |
| Decimal128 | 任意类型,需要使用mongoose.Schema.Types.Decimal128 指定 |
字段值验证
Mongoose有一些内建验证器,可以对字段值进行验证
必填项
title:{type:String,required:true}
默认项
title:{type:String,default:"匿名"}
枚举值
title:{type:String,enum:[1,2]}
唯一值
title:{type:String,unique:true}
删除文档
mongoose.connection.on('open',()=>{//5.创建文档的结构对象//设置集合中文档的属性以及属性值的类型let BookSchema =new mongoose.Schema({name:String,author:String,price:Number})//6.创建模型对象。对文档操作的封装对象let BookModel = mongoose.model('book',BookSchema) //数据库名(集合),数据库表名(结构对象)// 删除一个BookModel.deleteOne({author:'曹雪芹'},(err,data)=>{if(err){console.log("删除失败")return}console.log(data)}// 批量删除BookModel.deleteMany({is_hot:false},(err,data)=>{if(err){console.log("删除失败")return}console.log(data)}//项目运行过程中,不会添加该代码mongoose.disconnect();
})
更新文档
mongoose.connection.on('open',()=>{//5.创建文档的结构对象//设置集合中文档的属性以及属性值的类型let BookSchema =new mongoose.Schema({name:String,author:String,price:Number})//6.创建模型对象。对文档操作的封装对象let BookModel = mongoose.model('book',BookSchema) //数据库名(集合),数据库表名(结构对象)// 更新BookModel.updateOne({name:"红楼梦"},{price:9.9},(err,data)=>{if(err){console.log("更新失败")return}console.log(data)}// 批量更新BookModel.updateMany({author:"余华"},{is_hot:true},(err,data)=>{if(err){console.log("更新失败")return}console.log(data)}//项目运行过程中,不会添加该代码mongoose.disconnect();
})
读取文档
mongoose.connection.on('open',()=>{//5.创建文档的结构对象//设置集合中文档的属性以及属性值的类型let BookSchema =new mongoose.Schema({name:String,author:String,price:Number})//6.创建模型对象。对文档操作的封装对象let BookModel = mongoose.model('book',BookSchema) //数据库名(集合),数据库表名(结构对象)// 读取BookModel.findOne({name:"红楼梦"},(err,data)=>{if(err){console.log("读取失败")return}console.log(data)}// 根据id获取BookModel.findById("a124s",(err,data)=>{if(err){console.log("读取失败")return}console.log(data)}// 批量读取BookModel.find({author:"余华"},(err,data)=>{if(err){console.log("读取失败")return}console.log(data)}// 读取allBookModel.find((err,data)=>{if(err){console.log("读取失败")return}console.log(data)}//项目运行过程中,不会添加该代码mongoose.disconnect();
})
条件控制
运算符
在mongodb不能> < >= <= !==等运算符,需要使用替代符号
> 使用$gt
<使用$lt
>=使用$gte
<=使用$lte
!==使用$ne
BookeModel.find({price:{$lt:20}},(err,data)=>{if(err){console.log("读取失败")return}console.log(data)
})
逻辑运算
$or逻辑或的情况
BookeModel.find({$or:[{author:"曹雪芹"},{author:"余华"}]},(err,data)=>{if(err){console.log("读取失败")return}console.log(data)
})
$and逻辑与的情况
BookeModel.find({$and:[{price:{$gt:30}},{price:{$lt:70}}]},(err,data)=>{if(err){console.log("读取失败")return}console.log(data)
})
正则匹配
BookeModel.find({name:/三/},(err,data)=>{if(err){console.log("读取失败")return}console.log(data)
})
BookeModel.find({name:new RegExp('三')},(err,data)=>{if(err){console.log("读取失败")return}console.log(data)
})
个性化读取
字段筛选
//0:不要的字段
//1:要的字段
SongModel.find().select({_id:0,title:1}).exec(function(err,data)if(err) throw err;console.log(data);mongoose.connection.close(); //mongoose.disconnect();
});
数据排序
//sort排序
//1:升序
//-1:倒序
SongModel.find().sort({hot:1}).exec(function(err,data)if(err) throw err;console.log(data);mongoose.connection.close() //mongoose.disconnect();
});
数据截取
//skip跳过limit限定
SongModel.find().skip(10).limit(10).exec(function(err,data)if(err) throw err;console.log(data);mongoose.connection.close(); //mongoose.disconnect();
});
代码模块化
#TODO

相关文章:
mongoose学习记录
mongoose安装和连接数据库 npm i mongoose导入mongoose const mongoose require(mongoose) mongoose.set("strictQuery",true)连接数据库 mongoose.connect(mongodb:127.0.0.1:27017/test)设置回调 mongoose.connection.on(open,()>{console.log("连接成…...
边缘与云或边缘加云:前进的方向是什么?
边缘计算使数据处理更接近数据源,以及由此产生的行动或决策的对象。通过设计,它可以改变数十亿物联网和其他设备存储、处理、分析和通信数据的方式。 边缘计算使数据处理更接近数据源,以及由此产生的行动或决策的对象。这与传统的体系结构形成…...
蓝桥杯第1037题子串分值和 C++ 字符串 逆向思维 巧解
题目 思路和解题方法 方案一——遍历哈希表 仅能过60%样例,大多数同学都用的该方法,就不过多赘述 #include <iostream> #include <unordered_map> using namespace std; int main() {string s;cin >> s;int n s.size();int res n;for (int i 0…...
力扣题:字符串的反转-11.23
力扣题-11.23 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:557. 反转字符串中的单词 III 解题思想:先读取单词,然后将单词进行翻转即可 class Solution(object):def reverseWords(self, s):""":type s…...
【软件测试】盘一盘工作中遇到的 Redis 异常测试
在测试工作中,涉及到与 redis 交互的场景变的越来越多了。关于redis本身就不作赘述了,网上随便搜,本人也做过一些整理。 今天只来复盘一下,在测试过程中与 redis 的二三事儿。其中提到的案例是经过抽象化的,用作辅助说…...
14.Oracle中RegExp_Like 正则表达式基本用法
--基本用法,是否包含某字符串 like %36% select * from k_micfo where regexp_like(loginid,36);if regexp_like(str,^[0-9\.]$) --只包含数字0-9,,小数点.--oracle判断字段是否是纯数字 (四种写法结果一样) select * from k_micfo where r…...
Docker Swarm总结+Jenkins安装配置与集成(5/5)
博主介绍:Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 🍅文末获取源码下载地址🍅 👇🏻 精彩专栏推荐订阅👇🏻…...
docker安装Sentinel zipkin
文章目录 引言I Sentinel安装1.1 运行容器1.2 DOCKERFILE 参考1.3 pom 依赖1.4 .yml配置(整合springboot)II 资源保护2.1 Feign整合Sentinel2.2 CommonExceptionAdvice:限流异常处理类III zipkin引言 消息服务和请求第三方服务可不配置Sentinel。 </...
利用python实现文件压缩打包的功能
主要是利用了zipfile实现文件压缩打包,简单实例代码如下: import zipfilewith zipfile.ZipFile("archive.zip",w) as zipf:zipf.write("config.ini")zipf.write("test.py") 其中的模式 w表示如果没有该文件则创建该文件…...
如何创建百科?建立百科词条的意义何在?九问百科营销
在营销工作实践中,小马识途营销顾问经常接到关于百科营销的咨询,现整理了最受关注的九个问题分享给热爱营销工作的小伙伴。 一、什么是百科营销? 百科营销是借助百科知识传播,可以将企业、品牌、人物所拥有的对用户有价值的信息&a…...
Django如何设置时区为北京时间?
Django默认使用的是UTC时间,北京时间比UTC早8个小时,即如果UTC是凌晨两点,那么北京时间是早上八点。 Django中把setting.py中的语句: TIME_ZONE UTC修改为: TIME_ZONE Asia/Shanghai就把时区改为了北京时间。 这…...
Basemap地图绘制_Python数据分析与可视化
Basemap地图绘制 安装和使用地图投影地图背景在地图上画数据 Basemap是Matplotlib的一个子包,负责地图绘制。在数据可视化过程中,我们常需要将数据在地图上画出来。 比如说我们在地图上画出城市人口,飞机航线,军事基地,…...
C#编程题分享(5)
判断质数问题 输⼊⼀个正整数,判断该数是否是质数。如果为质数输出 yes,如果不是输出no 样例输⼊113 输出yes int n Convert.ToInt32(Console.ReadLine()); int count 0; for (int i 1; i < n 1; i) {if (n % i 0) // 判断该数能被整除{coun…...
群晖Video Station 添加海报墙-新方法
海报墙 一般我们找到的都是mp4、mkv等格式的视频资源,而没有像上图这样的海报资源,那要怎样实现海报墙呢? 按照以前的方法,是可以通过The Movie Database的API Key来搜刮电影海报信息,但是现在这个方法不行了 现在介绍…...
【MODBUS】Modbus协议入门简介
Modbus(Modicon Communication Protocol)是一种用于工业自动化领域的通信协议,最初由Modicon(现在是施耐德电气的一部分)开发。Modbus协议被广泛应用于连接不同厂商的工业设备,实现设备之间的通信和数据交换…...
ORA-00257: archiver error. Connect internal only, until freed……
今天给客户测 试问题,让客户把数据发过来了。解压缩后一看,他们还是用的oracle 815版本的(他们exp导出时,带了导出日志,从导出日志中看出来是oracle 815版本的),不过没有关系,低版本的exp是可以用高版本的i…...
继承 和 多肽(超重点 ! ! !)
[本节目标] 1.继承 2.组合 3.多肽 1.继承 1.1 为什么要继承 Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是现实世界错综复杂,事物之间可能会存在一些关联࿰…...
H265、VP9、AV1视频编码器性能对比
1、背景介绍 目前在视频编解码器中,H264 已经成为绝对的主流,被大部分设备、浏览器所支持。虽然有更先进的编码器推出,但是受限于推广速度和设备支持成本,一直未能成为主流。 今年公司的目标是持续降本增效,现在将”屠刀“指向了视频业务的存储成本。视频文件存储主要两…...
C语言-结构体
---------------------------- ------------------ 岁月漫长心怀热爱,携手共赴星辰大海 --------今天来到我们自定义类型 -----结构体的讲解 目录 结构体的类型声明和初始化 结构体的类型声明 结构体成员的直接访问 结构体成员的间接访问 嵌套结构体进行访问 使用…...
C#拼夕夕自动化登录,电商网页自动化操作。WebView2
单纯靠WebView2是没办法通过JS实现自动登录操作的,包括浏览器插件,都不行,因为大公司对反爬机制控制的还是挺严格。 下面是实现效果,私信我,咨询解决方案。 20231202_153912 C#有偿Q群:927860652博客仅为…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
