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博客仅为…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
