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日期
Bufferbuffer对象
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
在这里插入图片描述

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

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

相关文章

规则引擎专题---3、Drools组成和入门

Drools概述 drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎&#xff0c;可以将复杂且多变的业务规则从硬编码中解放出来&#xff0c;以规则脚本的形式存放在文件或特定的存储介质中(例如存放在数据库中)&#xff0c;使得业务规则的变更不需要修改项目代码、重启…

numpy实现神经网络

numpy实现神经网络 首先讲述的是神经网络的参数初始化与训练步骤 随机初始化 任何优化算法都需要一些初始的参数。到目前为止我们都是初始所有参数为0&#xff0c;这样的初始方法对于逻辑回归来说是可行的&#xff0c;但是对于神经网络来说是不可行的。如果我们令所有的初始…

手写VUE后台管理系统7 - 整合Less样式

整合LESS 安装使用 Less&#xff08;Leaner Style Sheets&#xff09;&#xff0c;是一门向后兼容的 CSS 扩展语言。 Less 官网&#xff1a;https://less.bootcss.com/ 安装 yarn add less安装完成就可以直接使用了 使用 以文件形式定义全局样式 在 assets 目录下创建 less …

基于卷积神经网络的肺炎影像分类分割智能诊断系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a; 肺炎是一种常见的呼吸系统感染疾病&#xff0c;其主要病因包括细菌、病毒和真菌等。肺炎的早期诊断对于患者的治疗和预后至关重要。传统的肺炎诊断方…

打造个性化github主页 一

文章目录 概述创建仓库静态美化GitHub 统计信息卡仓库 GitHub 额外图钉仓库 热门语言卡仓库 GitHub 资料奖杯仓库 GitHub 活动统计图仓库 打字特效添加中文网站统计仓库 总结 概述 github作为全球最大的代码托管平台&#xff0c;作为程序员都多多少少&#xff0c;都使用过他。…

【排序】直接插入排序和希尔排序

目录 一、排序思想 1、直接插入排序 2、希尔排序 二、代码实现 三、性能比较 四、排序总结 1、直接插入排序 2、希尔排序 一、排序思想 1、直接插入排序 基本思想&#xff1a;把待排序的序列选取一个整数逐个插入到已经排好的有序序列中&#xff0c;直到所有整数都插入…

智加科技获全国首张重卡无人驾驶开放道路测试牌照

2023年12月1日&#xff0c;智加科技获得苏州市智能网联汽车无人化测试牌照。该牌照也是江苏省及国内首张无人重卡开放高速公路全路段全场景全息路网&#xff08;S17苏台高速&#xff09;道路测试牌照。 该重卡无人驾驶开放道路测试牌照&#xff0c;经由苏州市智能网联汽车联席小…

图书整理II(两个栈实现队列)

目录 贼相似题目&#xff1a; 本题题目&#xff1a; 我们直接看题解吧&#xff1a; 审题目事例提示&#xff1a; 解题分析&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 代码补充说明&#xff1a; 力扣题目地址&#xff1a; LCR 125. 图书整理 II - 力扣&#xff0…

基于深度学习面向中医诊断的舌象图像分割系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 中医舌诊是通过观察舌的各种特征来了解人体的健康状况&#xff0c;从而对各种疾病做出诊断及病情评估&#xff0c;是传统中国医学应用最广、最有价值的诊法之一。…

如何在没有备份的情况下从 Android 手机恢复已删除的数据

电话数据对我们至关重要。我们可以更换我们使用的设备&#xff0c;但不能更换我们的数据。我们以前一直使用CD、USB 和硬盘来保存数据。随着技术的出现&#xff0c;我们遇到了云存储。我们可以随时随地、任意次数地访问存储。所有操作系统都有数据云&#xff0c;可以用来保存图…

docker容器内部文件挂载主机

docker images执行该命令可以发现一个centos镜像 docker run --namemycentos -itd --privilegedtrue --restartalways -p 88:80 -v C:\Users\Administrator\Desktop\dockerTest:/bin/gh:ro centosdocker run 命令用于在 Docker 上创建和运行容器。 --namemycentos 指定容器…

【面试HOT200】回溯篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于【CodeTopHot300】进行的&#xff0c;每个知识点的修正和深入主要参…

PAD平板签约投屏软件要如何选

又是一年年底了&#xff0c;年会开始多起来了&#xff0c;许多会务公司或活动公司会接到很多平板签约投屏业务&#xff0c;如年会中的签军令状、业绩保证书等。这时就面临选购一套签约投屏软件了。 目前的签约投屏软件&#xff0c;大多以H5做的网页版的多&#xff0c;但我建议…

Web安全漏洞分析-XSS(中)

随着互联网的迅猛发展&#xff0c;Web应用的普及程度也愈发广泛。然而&#xff0c;随之而来的是各种安全威胁的不断涌现&#xff0c;其中最为常见而危险的之一就是跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;简称XSS&#xff09;。XSS攻击一直以来都是Web安全领…

实战系统玩转OpenGL和AI,助力实现各种高级酷炫视频特效几个技巧

随着计算机图形学和人工智能的发展&#xff0c;通过将OpenGL和AI相结合&#xff0c;我们可以实现各种令人印象深刻的高级酷炫视频特效。本文将介绍几个技巧&#xff0c;帮助您在实践中更好地应用这些技术&#xff0c;并附上相应的源码。 火焰效果: 利用OpenGL的纹理映射和着色器…

LLM:《第 3 部分》从数学角度评估封闭式LLM的泛化能力

一、说明 在 OpenAI 或 Anthropic 等封闭式大型语言模型 (LLM) 领域&#xff0c;对智能和多功能性的真正考验在于它们处理高特异性查询并在响应中表现出独特性的能力。在这篇博客中&#xff0c;我的目标是提供测试这些模型泛化能力的机制。 封闭式LLM意味着您不知道训练语料库的…

【java智慧工地源码】智慧工地物联网云平台,实现现场各类工况数据采集、存储、分析与应用

“智慧工地整体方案”以智慧工地物联网云平台为核心&#xff0c;基于智慧工地物联网云平台与现场多个子系统的互联&#xff0c;实现现场各类工况数据采集、存储、分析与应用。通过接入智慧工地物联网云平台的多个子系统板块&#xff0c;根据现场管理实际需求灵活组合&#xff0…

SSM SpringBoot vue社团事务管理系统

SSM SpringBoot vue社团事务管理系统 系统功能 登录 个人中心 人员信息管理 考勤信息管理 空闲时间管理 现金日记账管理 经费预算管理 物品租借管理 会议信息管理 活动信息管理 项目任务管理 公告通知管理 物资信息管理 开发环境和技术 开发语言&#xff1a;Java 使用框架:…

面试题:千万量级数据中查询 10W 量级的数据有什么方案?

文章目录 前言初版设计方案整体方案设计为&#xff1a;技术方案如下&#xff1a;CK 分页查询使用 ES Scroll Scan 优化深翻页耗时数据 ESHbase 组合查询方案ES 查询的两个阶段组合使用 Hbase RediSearchRedisJSON 优化方案RediSearch 性能数据RedisJSON 性能数据 总结 前言 在…

【msg_msg】corCTF2021-msgmsg 套题

前言 该套题共两题&#xff0c;一道简单模式 fire_of_salvation&#xff0c;一道困难模式 wall_of_perdition&#xff0c;都是关于 msg_msg 的利用的。这题跟之前的 TPCTF2023 core 的很像&#xff08;应该是 TPCTF2023 core 跟他很像&#xff0c;bushi&#xff09;。 其中 f…