node.js mongoose schemaTypes
目录
官方文档
简介
SchemaType
示例
配置SchemaType规则
通用规则
特定schemaType规则
String
Number
Date
Map
monggose会根据shcemaType将文档值转换成指定的类型
官方文档
Mongoose v8.0.3: SchemaTypes
简介
SchemaTypes是在使用Mongoose时,用于定义MongoDB文档模型中字段的数据类型的一种概念。在Mongoose中,每个字段都有一个关联的SchemaType,它定义了该字段的数据类型、验证规则等信息。
SchemaType
String、Number、Date、Buffer、Boolean、ObjectId、Array、Map、Dcimal128、Schema、Mixed、UUID
示例
const schema = new mongoose.Schema({name: String,binary: Buffer,living: Boolean,updated: { type: Date, default: Date.now },age: { type: Number, min: 18, max: 65 },mixed: mongoose.Schema.Types.Mixed,_someId: mongoose.Schema.Types.ObjectId,decimal: mongoose.Schema.Types.Decimal128,array: [],ofString: [String],ofNumber: [Number],ofDates: [Date],ofBuffer: [Buffer],ofBoolean: [Boolean],ofMixed: [mongoose.Schema.Types.Mixed],ofObjectId: [mongoose.Schema.Types.ObjectId],ofArrays: [[]],ofArrayOfNumbers: [[Number]],nested: {stuff: { type: String, lowercase: true, trim: true }},map: Map,mapOfString: {type: Map,of: String}
});// example useconst Thing = mongoose.model('Thing', schema);const m = new Thing;
m.name = 'Statue of Liberty';
m.age = 50;
m.updated = new Date;
m.binary = Buffer.alloc(0);
m.living = false;
m.mixed = { wang: { thing: 'i want' } };
m.markModified('mixed');
m._someId = new mongoose.Types.ObjectId;
m.array.push(1);
m.ofString.push('strings!');
m.ofNumber.unshift(1, 2, 3, 4);
m.ofDates.addToSet(new Date);
m.ofBuffer.pop();
m.ofMixed = [1, [], 'three', { four: 5 }];
m.nested.stuff = 'good';
m.map = new Map([['key', 'value']]);
m.save();
配置SchemaType规则
通用规则
- required:布尔或函数,如果为true,则代表该值必传
- default: 默认值
- select:布尔,查询时是否投影
- validate:函数,属性值验证
- get: 函数,使用 Object.defineProperty() 定义该属性的自定义 getter
- set:函数,使用 Object.defineProperty() 定义该属性的自定义 setter
- alias:字符串,定义一个虚拟属性用于get、set此path
- immutable:布尔、设置此path的值不可更改
- index:布尔,是否将此属性设置索引,提高查询文档的速度
- unique:布尔,是否将此值定义为该集合唯一的属性值
const mongoose = require('mongoose');
const schema = new mongoose.Schema({name: {type: String,select: true,required: true,validate: v => v.length > 4,get: v => v +"aaaa",set: v => "aaaa" + v,alias: 'i',immutable: true}
});
const CatModel = mongoose.model('Cat', schema);async function stduyFn() {const cat = new CatModel({name: 'sss'});try {await cat.save();cat.name = '111111'cat.i = 'dadsadas'await cat.save();console.log(cat.name)} catch (err) {}
}stduyFn()
alias会添加一个虚拟属性,映射到path为name上,当设置immutable为true,更改cat.i和cat.name并不会成功更改。
查看SchemaType配置,关系
mongoose.SchemaType是所有SchemaTyps的基类,schema.path('field')是SchemaTyps的实例
console.log(schema.path('name'))
console.log(mongoose.Schema.Types.String.prototype.__proto__ == mongoose.SchemaType.prototype) // true
console.log(schema.path('name') instanceof mongoose.SchemaType) // true
console.log(schema.path('name') instanceof mongoose.Schema.Types.String) // true
特定schemaType规则
String
- lowercase: 布尔,是否始终对值调用 .toLowerCase()。如果设置为 true,则始终将值转换为小写
- uppercase: 布尔,是否始终对值调用 .toUpperCase()。如果设置为 true,则始终将值转换为大写
- trim: 布尔,是否始终对值调用 .trim()。如果设置为 true,则始终将值的前导和尾随空格去除。
- match: 正则表达式,检查值是否与给定的正则表达式匹配
- enum: 数组,该数组列出了值的所有可能取值
- minLength: 数字,检查值的长度是否不小于给定的数字
- maxLength: 数字,检查值的长度是否不大于给定的数字
Number
- min: 数字,检查值是否大于或等于给定的最小值
- max: 数字,检查值是否小于或等于给定的最大值
- enum: 数组,检查值是否严格等于给定数组中的一个值
Date
- min: 日期,检查值是否大于或等于给定的最小日期
- max: 日期,创建一个验证器,检查值是否小于或等于给定的最大日期
Map
- of:map的key类型默认为String,可以用of指定SchemaType
monggose会根据shcemaType将文档值转换成指定的类型
转Number
const mongoose = require('mongoose');
const schema = new mongoose.Schema({age: Number,
});
const Car = mongoose.model('Car', schema);async function stduyFn() {const cat = new Car({ age: '15' });const cat1 = new Car({ age: true })const cat2 = new Car({ age: false })const cat3 = new Car({ age: { valueOf: () => 83 } })try {await cat.save();await cat1.save();await cat2.save();await cat3.save();} catch (err) {}
}
stduyFn()
转String
const mongoose = require('mongoose');
const schema = new mongoose.Schema({number: Number,
});
const Car = mongoose.model('Car', schema);async function stduyFn() {const cat = new Car({ number: '1666' });const cat1 = new Car({ number: 1555 });const cat2 = new Car({ number: { valueOf: () => 1032 } })try {await cat.save();await cat1.save();await cat2.save();} catch (err) {}
}
stduyFn()
转Boolean
true、'true'、1、'1'、'yes'都为true,false、'false'、0、'0'、'no' 都为false
相关文章:
node.js mongoose schemaTypes
目录 官方文档 简介 SchemaType 示例 配置SchemaType规则 通用规则 特定schemaType规则 String Number Date Map monggose会根据shcemaType将文档值转换成指定的类型 官方文档 Mongoose v8.0.3: SchemaTypes 简介 SchemaTypes是在使用Mongoose时,用于…...
论文解读:On the Integration of Self-Attention and Convolution
自注意力机制与卷积结合:On the Integration of Self-Attention and Convolution(CVPR2022) 引言 1:卷积可以接受比较大的图片的,但自注意力机制如果图片特别大的话,运算规模会特别大,即上图中右边(卷积)会算得比较快…...
【Spring】15 ApplicationContextAware 接口
文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架提供了许多回调接口,用于在 Bean 的生命周期中执行特定的操作。ApplicationContextAware 接口是其中之一,它允许 Bean 获取对 A…...
Android 版本控制工具--Git
要在Android中使用Git,需要进行以下步骤: 安装Git:首先在你的开发环境中安装Git。在Windows中,你可以从官方网站(https://git-scm.com/downloads)上下载Git的可执行文件并进行安装。在Mac上,你可…...
Wireshark高级网络安全分析
第一章:Wireshark基础及捕获技巧 1.1 Wireshark基础知识回顾 1.2 高级捕获技巧:过滤器和捕获选项 1.3 Wireshark与其他抓包工具的比较 第二章:网络协议分析 2.1 网络协议分析:TCP、UDP、ICMP等 2.2 高级协议分析:HTTP…...
llvm后端之DAG设计
llvm后端之DAG设计 引言1 核心类设计2 类型系统2.1 MVT::SimpleValueType2.2 MVT2.3 EVT 3 节点类型 引言 llvm后端将中端的IR转为有向无环图,即DAG。如下图: 图中黑色箭头为数据依赖;蓝色线和红色线为控制依赖。蓝色表示指令序列化时两个节…...
反序列化 [SWPUCTF 2021 新生赛]ez_unserialize
打开题目 查看源代码 得到提示,那我们用御剑扫描一下看看 我们知道有个robots.txt,访问一下得到 那我们便访问一下 cl45s.php看看 得到网站源代码 <?phperror_reporting(0); show_source("cl45s.php");class wllm{public $admin;public …...
centos(linux)安装jenkins
官网:https://pkg.jenkins.io/redhat/ 安装官网进行操作: sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.reposudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key若出现如下错误: …...
Wireshark统计和可视化
第一章:Wireshark基础及捕获技巧 1.1 Wireshark基础知识回顾 1.2 高级捕获技巧:过滤器和捕获选项 1.3 Wireshark与其他抓包工具的比较 第二章:网络协议分析 2.1 网络协议分析:TCP、UDP、ICMP等 2.2 高级协议分析:HTTP…...
高通平台开发系列讲解(SIM卡篇)SIM软件架构介绍
文章目录 一、SIM软件架构二、MMG SDI Task三、GSTK Task四、Simlock Task沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍SIM的相关组件。 SIM软件架构: SIM软件架构指的是与SIM卡(Subscriber Identity Module,订阅者身份模块)相关的软件系统设计和…...
音频筑基:瞬态、基音、偏噪信号类型分析
音频筑基:瞬态、基音、偏噪信号类型分析 是什么深入理解从编码角度看,基音信号编码通常会有啥问题?在频域感知编码过程中,瞬态信号会有啥问题?如何解决?瞬态信号场景下,5/10ms帧长编码有啥区别&…...
HarmonyOS ArkTS 中DatePicker先择时间 路由跳转并传值到其它页
效果 代码 代码里有TextTimerController 这一种例用方法较怪,Text ,Button Datepicker 的使用。 import router from ohos.router’则是引入路由模块。 import router from ohos.router Entry Component struct TextnewClock {textTimerController: TextTimerContr…...
Axure RP 8 for Mac/win中文版:打造完美交互式原型设计体验
Axure RP 8,一款引领潮流的交互式原型设计工具,为设计师提供了无限的可能性,让他们能够创造出逼真的原型,从而更好地展示和测试他们的设计。 Axure RP 8拥有丰富的功能和工具,让设计师可以轻松地创建出复杂的交互式原…...
迪文屏开发保姆级教程——页面键盘
迪文屏页面键盘保姆级教程。 本篇文章主要介绍了在DGBUS平台上使用页面键盘的步骤。 迪文屏官方开发指南PDF:(不方便下载的私聊我发给你) https://download.csdn.net/download/qq_21370051/88647174?spm1001.2014.3001.5503https://downloa…...
Unity的UI界面——Text/Image
编辑UI界面时,要先切换到2d界面 (3d项目的话) 1.Text控件 Text控件的相关属性: Character:(字符) Font:字体 Font Style:字体样式 Font Size:字体大小 Line Spac…...
sklearn和tensorflow的理解
人工智能的实现是基于机器学习,机器学习的一个方法是神经网络,以及各种机器学习算法库。 有监督学习:一般数据构成是【特征值目标值】 无监督学习:一般数据构成是【特征值】 Scikit-learn(sklearn)的定位是通用机器学习库&…...
css中BFC
css BFC BFC具有以下特性创建BFC的方式有多种BFC的应用场景和作用 扩展: CSS动画 transition: 过渡动画animation / keyframestransform都有哪些属性 举例 css BFC BFC,即块级格式化上下文(Block Formatting Context)…...
华为OD机试 - 小朋友来自多少小区(Java JS Python C)
题目描述 幼儿园组织活动,老师布置了一个任务: 每个小朋友去了解与自己同一个小区的小朋友还有几个。 我们将这些数量汇总到数组 garden 中。 请根据这些小朋友给出的信息,计算班级小朋友至少来自几个小区? 输入描述 输入:garden[] = {2, 2, 3} 输出描述 输出:7 备…...
前端:NPM的介绍和使用
一、NPM的介绍 NPM是Node.js的包管理器,用于管理Node.js的包NPM提供了方便的方式来安装、管理和分享Node.js的包 二、NPM的使用 1. 安装NPM 要使用NPM,首先需要安装Node.js。安装完成后,可以在命令行中运行以下命令来检查Node.js和NPM是否…...
力扣57. 插入区间
双指针法 思路: 用待插入区间左右边界初始化双指针 left 和 right;遍历待归并区间: 如果元素整体边界在 [left, right] 左侧(item[1] < left),则将给元素插入结果数组中;如果元素整体边界在…...
Linux c++开发-11-Socket TCP编程简单案例
服务端: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <sys/types.h>#include <errno.h>int main(void) {//1.socketint server_sock socket(A…...
ros2机器人常规控制流程
The joint_state_publisher reads the robot_description parameter from the parameter server, finds all of the non-fixed joints and publishes a JointState message with all those joints defined.也就是说如果我们不需要控制机器人运动,只需要一个节点就可…...
分布式全局ID之雪花算法
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 雪花算法 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是雪花算法?…...
拿到服务器该做的事和升级docker engine
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudo -i # 切换到 root 用户apt update -y # 升级 packagesapt install wget curl sudo vim git -y # Debian 系统比较干净,安装常用的软件 安装docker …...
【VScode和Leecode的爱恨情仇】command ‘leetcode.signin‘ not found
文章目录 一、关于command ‘leetcode.signin‘ not found的问题二、解决方案第一,没有下载Nodejs;第二,有没有在VScode中配置Nodejs第三,力扣的默认在VScode请求地址中请求头错误首先搞定配置其次搞定登入登入方法一:…...
mangokit:golang web项目管理工具,使用proto定义http路由和错误
文章目录 前言1、mangokit介绍1.1 根据proto文件生成http路由1.2 根据proto文件生成响应码1.3 使用wire来管理依赖注入 2、mangokit实现2.1 protobuf插件开发2.2 mangokit工具 3、使用示例3.1 创建新项目3.2 添加新的proto文件3.3 代码生成 前言 在使用gin框架开发web应用时&a…...
微信小程序实现一个简单的登录功能
微信小程序实现一个简单的登录功能 功能介绍login.wxmllogin.jsuserInfo.wxmluserInfo.js解析 功能介绍 微信小程序实现一个简单的登录功能。包括一个登录页面和一个用户信息展示页面。在登录页面中输入用户名和密码,点击登录按钮进行验证,如果验证成功&…...
whisper深入-语者分离
文章目录 学习目标:如何使用whisper学习内容一:whisper 转文字1.1 使用whisper.load_model()方法下载,加载1.2 使用实例对文件进行转录1.3 实战 学习内容二:语者分离(pyannote.audio)pyannote.audio是huggi…...
LuaJava操作Java的方法
最近在学习lua,然后顺便看了下luaj,可能用的人比较少,网上关于luaj的文章较少,其中在网上找到这个博主的相关文章,很详细,对于要学习luaj的小伙伴可以两篇一起查看,本文在此基础上进行扩展。 …...
oracle怎样才算开启了内存大页?
oracle怎样才算开启了内存大页? 关键核查下面三点: 1./etc/sysctl.conf vm.nr_hugepages16384这是给了32G,计划sga给30G,一般需多分配2-4G sysctl -p生效 看cat /proc/meminfo|grep Huge啥结果? 这种明显是配了…...
网站信息化建设总结/首页关键词怎么排名靠前
IE8在默认情况下是使用标准模式(Standard Mode)来显示网页。 如果网页代码还没有标准化, 在IE8下可能会显示不正常。 这时候可以让用户使用兼容模式(Compatibility View) 来浏览网页。 所谓的兼容模式其实就是使用IE7的显示引擎。 IE8 上有个…...
西安网约车公司排行榜/重庆百度推广优化
小哥哥、小姐姐,你们好,请把手伸出来,我给你们点东西。 1、JavaScript异步编程 同步与异步回调函数promisegeneratorasyncawait2、写一个符合规范的promise库 1、JavaScript异步编程 1-1、同步与异步 我们都知道js是单线程语言,这…...
企业网站管理系统破解版/百度信息流是什么
城市平乱 时间限制:1000 ms | 内存限制:65535 KB难度:4描述南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。 他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M。 现在,小工军师告诉南…...
电脑做高考真题的网站/沈阳seo网站推广
转载于:https://www.cnblogs.com/mycapple-zgs-111411/p/7136278.html...
有初中生做的网站吗/想做推广哪个平台好
04年IM软件评测:表情贴图(转)测试项目三 聊天辅助之表情贴图 朗玛UC UC的表情图标看起来比较可爱,无论是创意和颜色选取都属于上乘之作,它的默认贴图总数高达80个了,软件支持自定义表情贴图上传,还能够进行聊天表情贴…...
博客群 wordpress/长沙seo就选智优营家
本文讲述在Windows下使用BehaviorTree.CPP,基于VSCode 一 安装CMake和MinGW 请参考这篇文章,确保cmake和MinGW的bin目录添加到系统的环境变量里。 如果安装了Visual Studio,也可以不安装MinGW,只是需要一个编译器而已。本人没有…...