Mongoose Schemas定义中timestamps选项的妙用
在Node.js中使用MongoDB少不了Mongoose。
假设有如下Mongoose Schemas的定义:
var ItemSchema = new mongoose.Schema({biz: String,name: String,tradeType: String,totalFee: Number,transactionId: String,createTime: {type: Date,default: Date.now},updateTime: {type: Date,default: Date.now} }, {versionKey: false });
我们希望在保存model数据时不用指定createTime字段的值,按照上述Schema的定义,createTime会自动保存为系统当前时间。当然,在更新model数据时updateTime字段的值也能自动保存为系统当前时间。但是这里有两个问题:
1. Schema定义中含有default属性的字段在创建新文档时会自动生成值,但是如果数据库中缺少该字段,读取数据时也会自动生成值。例如上述schema所定义的表中先前保存进去的文档如果没有createTime字段,则读取数据时createTime字段的值默认都是系统当前时间。这显示不科学。
2. 我们并不能做到在每次更新文档时自动更新updateTime字段的值,所以这里给updateTime字段设置default属性有点多余。
那如何才能在schema定义中让MongoDB自动生成和管理createTime和updateTime字段的值呢?答案是使用timestamps选项。有关timestamps选项的作用可以看官方文档的解释http://mongoosejs.com/docs/guide.html#timestamps
我们将上述Schema的定义修改如下:
var ItemSchema = new mongoose.Schema({biz: String,name: String,tradeType: String,totalFee: Number,transactionId: String,createTime: {type: Date,default: Date.now},updateTime: {type: Date,default: Date.now} }, {versionKey: false,timestamps: { createdAt: 'createTime', updatedAt: 'updateTime' } });
添加了高亮显示的部分。timestamps选项会在创建文档时自动生成createAt和updateAt两个字段,值都为系统当前时间。并且在更新文档时自动更新updateAt字段的值为系统当前时间。如果想自定义这两个字段的名称,则可以使用上述高亮部分的定义方法。如果使用默认的字段名,则使用下面的定义方法即可:
timestamps: true
在Mongoose中,定义数据库model schemas时使用timestamps选项可以给我们带来许多便利。在创建文档时不用在代码中去指定createTime字段的值,在更新文档时也不用去修改updateTime字段的值。
Mongoose Schemas定义中timestamps选项的妙用相关推荐
- C++宏定义中#与##的妙用
在C++开发当中经常用到宏的定义当中使用"#"或者"##",以下是对着两种符号使用方法的简单描述: define中的#就是把#后面的参数当做一个符号来使用,简单 ...
- Swift中的选项集合
Swift3中的选项集合(Option Set) 作者:Ole Begemann,原文链接,原文日期:2016/09/28 译者:Lanford3_3:校对:saitjr:定稿:CMB 选项集合在OC ...
- 重学TCP协议(7) Timestamps 选项
1.Timestamps 选项的组成部分 时间戳选项占10个字节= kind(1字节) + length(1字节) + info (8字节),其中kind=8,length=10,info由times ...
- 使用计算机要遵循哪些规则,中国大学MOOC:\\\在计算机网络的定义中,把众多计算机有机连接起来要遵循规定的约定和规则,称之为( )。\\\;...
问题:中国大学MOOC:\\\"在计算机网络的定义中,把众多计算机有机连接起来要遵循规定的约定和规则,称之为( ).\\\"; 更多相关问题 在地方性分异因素作用下,土地类型的分布 ...
- 宏定义中的 ## ... __VA_ARGS__
宏定义中的##操作符和... and _ _VA_ARGS_ _ 1.Preprocessor Glue: The ## Operator 预处理连接符:##操作符 Like the # operat ...
- python函数定义中没有对参数指定类型、这说明_二级单选-函数和代码复用
. i. .w. 1 关于递归函数的描述,以下选项中正确的是 A 函数部包含对本函数的再次调用 B 函数比较复杂 C 包含一个循环结构 D 函数名称作为返回值 正确答案: A 2 关于递归函数基例的说 ...
- 关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...
关于Python程序中与"缩进"有关的说法中,以下选项中正确的是() 答:缩进在程序中长度统一且强制使用 同文学或同音乐主题的民歌,<_______>是其中之一.此曲经 ...
- python函数定义中参数列表里的参数是_详解Python函数中参数带星号是什么意思
函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数. 一.参数收集的定义 Python的函数支持可变不定数量的参数 ...
- #与##在宏定义中的--宏展开
#与##在宏定义中的--宏展开 #include <stdio.h> #define f(a,b) a##b #define g(a) #a #define h(a) g(a) int m ...
最新文章
- NIPS 2017录用论文先睹为快!论文作者清华专场分享(附PPT下载)
- python字符串写入excel-python 将数据写入excel
- 92. Leetcode 63. 不同路径 II (动态规划-路径规划)
- Kick Start 2019 Round D
- 多媒体技术创新开启“科技+文化”新“视”界
- Andriod中的两种自定义颜色选择器
- OpenCV3学习(6.1)——边缘检测---Canny,Sobel,Prewitt,Robert,Laplace,LOG,DOG算子
- 运行Gazebo出现[Err] [REST.cc:205] Error in REST reques
- Exchange邮件跟踪日志不得不了解的知识
- 同步、异步的使用场景及好处
- 屏蔽键盘信息(低级键盘钩子)
- 用Python爬取东方财富网上市公司财务报表
- HDU6069 欧拉筛法+约数定理+计算技巧。
- 电路抗干扰设计——非常详细
- 只需Ctrl+T,让 Excel 变身为「超级表格」
- 手把手带你 arduino 开发:基于ESP32S 的第一个应用-红外测温枪(带引脚图)
- c语言孙力课后作业答案,课后作业答案
- 永磁同步电机电阻、电感、惯量、转矩系数、反电势系数、极对数、编码器零位等一系列的参数辩识方法,电流速度环pi参数整定方法
- 时频分析在工程中的应用
- 批量修改或替换文件名中的字符