Mongoose 对象文档模型库

嵌入式web服务器之mongoose和goahead mongoose官网:https://cesanta.com/docs/overview/intro.html 一、mongoose简介 Mongoose是一个web服务器,通过提供一个web接口给它,它可以嵌入到现有的应用程序中去。Mongooseweb服务器的执行是自满足的,它不依赖于任何其他服务。 如果你将它复制到任何目录并执行,它将将启动web服务并将当前目录作为主目录、端口号是8080。... 阅读详情

一、介绍

Mongoose是一个对象文档模型库,官网:http://www.mongoosejs.net/

二、作用

方便使用代码操作Mongodb数据库

三、使用流程

//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');
//3. 连接数据库
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
//4. 设置连接回调
//连接成功
mongoose.connection.on('open', () => {
	console.log('连接成功');
	//5. 创建文档结构对象
	let BookSchema = new mongoose.Schema({
		title: String,
		author: String,
		price: Number
	});
	//6. 创建文档模型对象
	let BookModel = mongoose.model('book', BookSchema);
	//7. 插入文档
	BookModel.create({
		title: '西游记',
		author: '吴承恩',
		price: 19.9
	}, (err, data) => {
		if (err) throw err;

		//输出 data 对象
		console.log(data);
		//8. 断开连接
		mongoose.disconnect();
	});
});
//连接出错
mongoose.connection.on('error', () => {
	console.log('连接出错~~');
})
//连接关闭
mongoose.connection.on('close', () => {
	console.log('连接关闭');
})

四、字段类型

类型描述
String字符串
Number数字
Boolean布尔值
Array数组,也可以使用 [] 来标识
Date日期
BufferBuffer 对象
Mixed任意类型,需要使用 mongoose.Schema.Types.Mixed 指定
ObjectId对象 ID,需要使用 mongoose.Schema.Types.ObjectId 指定
Decimal128高精度数字,需要使用 mongoose.Schema.Types.Decimal128 指定

五、字段验证

Mongoose 有一些内建验证器,可以对字段值进行验证

5.1 必填项

title: {
type: String,
required: true // 设置必填项
}

5.2 默认值

author: {
type: String,
default: '匿名' //默认值
},

5.3 枚举项

gender: {
type: String,
enum: ['男','女'] //设置的值必须是数组中的
},

5.5 唯一值

username: {
type: String,
unique: true
},

六、CURD

数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(read)

6.1 增加

插入一条

SongModel.create({
	title: '给我一首歌的时间',
	author: 'Jay'
}, function(err, data) {
	//错误
	console.log(err);
	//插入后的数据对象
	console.log(data);
});

插入多条

PhoneModel.insertMany([{
		brand: '华为',
		color: '灰色',
		price: 2399,
		tags: ['电量大', '屏幕大', '信号好']
	},
	{
		brand: '小米',
		color: '白色',
		price: 2099,
		tags: ['电量大', '屏幕大', '信号好']
	}
], (err, data) => {
	if (err) throw err;
	console.log('写入成功');
	mongoose.connection.close();
})

6.2 删除

删除一条数据

SongModel.deleteOne({
	_id: '5dd65f32be6401035cb5b1ed'
}, function(err) {
	if (err) throw err;
	console.log('删除成功');
	mongoose.connection.close();
});

删除多条

SongModel.deleteMany({
	author: 'Jay'
}, function(err) {
	if (err) throw err;
	console.log('删除成功');
	mongoose.connection.close();
});

6.3 更新

   //更新一条数据  第一个参数是需要更新的对象,第二个参数是要更新的字段
    BookModel.updateOne({name:'秋园'},{price:8}).then(res=>{
	    console.log(res)
    })
   
   //更新多条
   BookModel.updateMany({author:'余华'},{is_hot:false}).then(res=>{
   	   console.log(res)
   })

6.4 查询

SongModel.findOne({
	author: '王力宏'
}, function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});
//根据 id 查询数据
SongModel.findById('5dd662b5381fc316b44ce167', function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});
//不加条件查询
SongModel.find(function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});
//加条件查询 第一个参数是查询条件
SongModel.find({
	author: '王力宏'
}, function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});

七、条件控制

7.1 运算符

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

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

 7.2 逻辑运算

$or 逻辑或的情况

//查找年龄为18或者24的学生
db.students.find({$or:[{age:18},{age:24}]}); 

$and 逻辑与的情况

//查找年龄大于15并且小于20的学生
db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});

7.3 正则匹配

条件中可以直接使用 JS 的正则语法,通过正则可以进行模糊查询

db.students.find({name:/imissyou/});

八、个性化读取

8.1 字段筛选

//0:不要的字段
//1:要的字段
SongModel.find().select({
	_id: 0,
	title: 1
}).exec(function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});

8.2 数据排序

//sort 排序
//1:升序
//-1:倒序
SongModel.find().sort({
	hot: 1
}).exec(function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});

8.3 数据截取

//skip 跳过 limit 限定
SongModel.find().skip(10).limit(10).exec(function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});

Mongoose下载安装与使用 / 结构对象name: {},age: {},sex: {enum: ['男', '女']title: {},author: {default: '匿名',},bookType数据库服务器和业务服务器都连接成功后,开始对路由地址的数据进行处理person.js// 结构对象name: {},age: {},email: {一个接口,就是服务中的一个路由规则,用来操作数据。Web服务接口的一种,是一种规范快速搭建服务。 阅读详情

相关推荐

MongDB之初识Mongoose入门

MongDB是介于关系型数据库和非关系型数据库之间的产品,Mongoose 是一种MongoDB对象建模工具,旨在在异步环境中工作

weixin_45671390的博客 605

mongoose

mongoose是什么? mongoose官网: https://mongoosejs.com/. Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具,它是一个第三方模块。 Mongoose构建在mongodb之上,提供了Schema、Model和Document对象,用起来更为方便。 Model:相当于mongoDB数据库中的集合 Document:相当于数据库中的一个具体的文档 mongoose安装 npm install mongoose 使用 var

weixin_45773421的博客 1213

nodeJS——Mongoose基础操作

在 MongoDB 的查询投影中,有这样一个规则:不能同时混合使用 1 和 0 作为值(除了 _id 字段),即要么全部使用 1 来包含字段,要么全部使用 0 来排除字段,只有 _id 字段可以例外处理。MongoDB 支持对各种类型的数据进行排序,但为了确保最佳性能,尤其是当处理大量数据时,应该尽量对数值和日期类型进行排序,并且为经常用于排序的字段创建索引。作为参数,该对象的键是你要排序的字段名,值为 1 标识升序(从小到大),值为-1 表示降序(从大到小),可以在。)等,可以简化应用程序的开发过程。

weixin_45780818的博客 1089

Mongoose (快速入门)

mongoose 学习 mongoose 基础 介绍 Mongoose 是一个让我们可以通过Node来操作MongoDB数据库的一个模块 Mongoose 是一个对象文档模型(ODM)库,它是对Node原生的MongoDB模块进行了进一步的优化封装 大多数情况下,他被用来把结构化的模式应用到一个MongoDB集合,并提供了验证和类型装换等好处 基于MongoDB驱动,通过关系型数据库的思想来实现非关系型数据库 优势/好处 为文档创建模式结构(Schema),也可以说是约束 对模型中的对象/文档进行验

weixin_45828332的博客 4万+

【深度学习3】ubuntu22.04从零开始搭建深度学习环境

ubuntu22.04从零开始搭建深度学习开发环境

weixin_43387635的博客 1万+

手机也能跑大模型?QNN框架实战:从模型量化到Android部署全流程

本文详细介绍了如何利用QNN框架将大模型部署到Android手机端进行端侧推理。通过实战演示了从模型量化(如INT4/INT8混合精度)到Android应用集成的全流程,包括内存优化、性能调优及常见问题排查,帮助开发者实现大模型在资源受限设备上的高效本地运行。

joy55的博客 500

mongoose(对象文档模型库)的使用

Mongoose是Node.js操作MongoDB的优化模块,通过对象映射简化数据库操作。它提供Schema模式对象定义文档结构,Model对象作为集合操作接口,Document对象表示具体文档。使用步骤包括:连接数据库、创建Schema、生成Model。Model提供增删改查方法如create()、find()、updateOne()、deleteMany()等,均为异步操作。文档对象(Document)是Model实例,支持save()等方法。Mongoose解决了非关系型数据库的类型限制问题,支持数据

A6516565189的博客 551

硬件手册——PT100精密测温电路

PT100精密测温电路 一、需求分析 根据题目要求为:测温范围为0-100℃、测温精度要求为±1℃。由于铂电阻具有精度高、性能可靠、稳定性好的特点,且铂电阻的电阻相对变化率与温度的关系曲线线性度最好,故选择铂电阻作为敏感元件。而在国标中,铂电阻有几种不同的标准,如PT100、PT1000。分别对应着0摄氏度下铂电阻的阻值为100R和1000R,由于需要考虑铂电阻的自发热问题,所以尽量选择阻值小的铂电阻,故选择PT100为最终型号。 二、电路设计 2.1 热电阻接法 热电阻测温电路有多种接法,其中三线制会导致

weixin_41655430的博客 5万+

mongoose(对象文档模型库)的使用:从 Schema 到 Model 的完整实践

用 mongoose 在 Node.js 中操作 MongoDB,从 Schema 定义、Model 创建到 CRUD 与校验完整跑通,并排查 401、连接失败、CastError 等常见报错。文中附可复制代码与 TaoToken 统一 Key 配置,官网见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。

weixin_35757191的博客 11

港口集装箱码头运营FlexSim仿真

列队4中的集装箱会根据不同类型的集装箱会放置在不同的堆场,因此根据前面对集装箱设置的标签Type的数值不同,设置不同的发送端口。集装箱到达列队3后,会有70%的集装箱到达堆场,30%的集装箱运出港口,因此在Queue列队3的Flow界面设置按照百分比发送端口,其中70%发送到端口1,即发送到列队4等待进入堆场,30%发送到端口2,即发送至出闸口。通过上述对比表格可以看出,当集卡数量在10的时候,岸桥和场桥的设备利用率达到了最高,当集卡数量为12的时候场桥1和场桥3的利用率有所下降,因此综合考虑。

m0_72514516的博客 1331

Coze智能体网页集成实战:从零搭建免登录AI助手

本文详细介绍了如何利用Coze Chat SDK从零开始为网站集成免登录AI助手。通过获取访问令牌和智能体ID,仅需几行JavaScript代码即可将功能完整的对话窗口嵌入网页,实现开箱即用的智能交互。文章重点讲解了核心部署步骤、会话隔离方案以及UI深度定制方法,帮助开发者快速打造贴合品牌、提升用户体验的网页AI助手。

gold8的专栏 558

Mongoose 对象文档模型库:Schema 校验与中间件在 Node.js 项目中的落地实践

Mongoose 对象文档模型库通过 Schema 校验与 pre/post 中间件,为 Node.js 项目提供数据守门员能力。本文给出可复制的用户模型定义、内置校验器配置、密码哈希与级联删除钩子写法,并用 Jest 单元测试和 Express 接口调用验证校验是否触发、钩子是否执行,同时对照 ValidationError、E11000、OverwriteModelError 等真实报错排查。配合 TaoToken 官网 https://taotoken.net/?utm_source=taotoken

weixin_42576804的博客 7

第4章--CANoe library开发 - 诊断功能

因为专栏要做的是汽车ECU自动化测试程序,测试的是ECU的诊断和刷新,因此就需要利用CANoe的接口,开发一些方便使用的诊断报文收发函数。

j187067046的博客 1398

mongoose(对象文档模型库)的使用:从 Schema 到 Model 的实战配置

用 mongoose 定义 Schema 时开启 timestamps 并去掉 versionKey,再通过 mongoose.models 缓存避免 OverwriteModelError,即可在 Node 中稳定操作 MongoDB。本文从连接配置到增删改查逐条验证,并整理 ValidationError、CastError 等常见报错排查路径。TaoToken 官网:https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_36431145的博客 2

python ERA-5气象数据NetCDF格式解析(一)

python ERA-5气象数据NetCDF格式解析

weixin_43896283的博客 2638

RTK_ROS_导航(1): GNSS里程计

1. RTK 配置 4G CORS + 4G 网络 + 户外有信号,不能实现RTK,就恢复出厂设置 输出信息包含(一般需要三个同时打开): GAPPA:包含位置信息 GPVTG:包含速度信息 GPHDT:包含定向的朝向信息 2. ROS驱动 驱动安装sudo apt install ros-noetic-nmea-navsat-driver 运行,需要修改该功能包的启动端口,会自动解析上面的3个RTK语句信息roslaunch nmea_navsat_driver nmea_serial_d

旋风小短腿 4265

mongoose学习笔记

mongoose学习笔记

m0_61989957的博客 719

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

web前端技术Mongoose详解

简介 之前我们都是通过shell来完成对数据库的各种操作的,在开发中大部分时候我们都需要通过程序来完成对数据库的操作。 而Mongoose就是一个让我们可以通过Node来操作MongoDB的模块。 Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。 在大多数情况下,它被用来把结构化的模式应用到一个MongoDB集合,并提供了验证和类型转换等好处。 mongoose的好处 可以为文档创建一个模式结构(Schema) 可

zjjcchina的博客 510

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

MongoDB学习笔记二- Mongoose

MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就是一个让我们可以通过Node来操作MongoDB的模块 Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装, 并提供了更多的共嗯那个 在大多数情况下, 它被用来把结构化的模式应用到一个MongoDB集合, 并提供了验证和类型转换等好处 Mongoose

qq_45948222的博客 291

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Moogose---用Node连接Mongodb

需要注意的问题:一定要注意在函数里面的格式 如: 所以函数里面传入的一定是个类,注意格式! 2. 多文档之间的关系:一对一、一对多、多对多 a) 一对一 如:数据可以这样存储,这种形式叫做内嵌文档 b) 一对多 i. 内嵌文档数组的形式 ii. 记录id c) 多对多 其实本质和一对多差不多,都是数组格式 如: Sort和投影 a) Find的时候默认根据_id(时间戳)升序排序 b) So...

NDSoumig的博客 338

【Node.js】笔记梳理 7 - mongoose

写在最前:跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识,需要格外注重实战和官方技术文档,文档建议作为手册使用。

前端小白, 稀土:雩风十六 1238

mongoose 子文档_使用Mongoose建模Mongo文档

mongoose 子文档 毫无疑问,构建利用MongoDB的应用程序的最快方法之一就是使用Node。 好像这两个平台是彼此独立的。 可用于处理Mongo的大量Node库证明了一个充满活力的创新社区。 确实,这些天我最喜欢的Mongo图书馆是Mongoose 。 简而言之,Mongoose是一个对象建模框架,通过它可以非常轻松地对集合进行建模,并最终与支持丰富功能集的直观对象一起使用。 像N...

danpu0978的博客 309

mongoose 嵌套文档查询

{ "_id" : ObjectId("5d0b5b7d054a183d24d34a6b"), "name" : "Ian Fleming", "age" : 18, "address" : [ { "_id" : ObjectId("5d0b5b7d054a183d24d34a6d"), "cit...

sun 2896

使用Mongoose建模Mongo文档

毫无疑问,构建利用MongoDB的应用程序的最快方法之一就是使用Node。 好像这两个平台是彼此制造的。 可用于处理Mongo的大量Node库证明了一个充满活力的创新社区。 确实,这些天我最喜欢的Mongo图书馆是Mongoose 。 简而言之,Mongoose是一个对象建模框架,通过它可以非常轻松地对集合进行建模,并最终与支持丰富功能集的直观对象一起使用。 像Node中的大多数东西一样...

danpu0978的博客 232

mongoose更新doc对象

使用mongoose更新对象 下面这种操作不可以更新 let doc = { name: 1, value: 2 } await Templates.updateOne({ _id: temp._id }, { doc }); 解决方式 doc内容少的情况下,分开写 let doc = { name: 1, value: 2 } await Templates.updateOne({ _id: temp._id }, { name: 1, value: 2 }); 加上$set,直接更新整个doc

volunteer1024的博客 410

MongoDB——Mongoose

一、Mongoose简介  Mongoose是一个让我们可以通过Node来操作MongoDB的模块,是一个对象文档模型(ODM),它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。大多数情况下,Mongoose被用来把结构化的模式应用到一个MongoDB集合,并提供验证和类型转换等。简单的说它是前端开发用来操作MongoDB的一个工具,类似于后台开发使用Mybatis...

如不來的博客 661
上一篇: MongoDb数据库
下一篇: express框架使用
菊の物语
博客等级 码龄10年 322粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值