在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自动生成和管理createTimeupdateTime字段的值呢?答案是使用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选项会在创建文档时自动生成createAtupdateAt两个字段,值都为系统当前时间。并且在更新文档时自动更新updateAt字段的值为系统当前时间。如果想自定义这两个字段的名称,则可以使用上述高亮部分的定义方法。如果使用默认的字段名,则使用下面的定义方法即可:

timestamps: true

  在Mongoose中,定义数据库model schemas时使用timestamps选项可以给我们带来许多便利。在创建文档时不用在代码中去指定createTime字段的值,在更新文档时也不用去修改updateTime字段的值。

Mongoose Schemas定义中timestamps选项的妙用相关推荐

  1. C++宏定义中#与##的妙用

    在C++开发当中经常用到宏的定义当中使用"#"或者"##",以下是对着两种符号使用方法的简单描述: define中的#就是把#后面的参数当做一个符号来使用,简单 ...

  2. Swift中的选项集合

    Swift3中的选项集合(Option Set) 作者:Ole Begemann,原文链接,原文日期:2016/09/28 译者:Lanford3_3:校对:saitjr:定稿:CMB 选项集合在OC ...

  3. 重学TCP协议(7) Timestamps 选项

    1.Timestamps 选项的组成部分 时间戳选项占10个字节= kind(1字节) + length(1字节) + info (8字节),其中kind=8,length=10,info由times ...

  4. 使用计算机要遵循哪些规则,中国大学MOOC:\\\在计算机网络的定义中,把众多计算机有机连接起来要遵循规定的约定和规则,称之为( )。\\\;...

    问题:中国大学MOOC:\\\"在计算机网络的定义中,把众多计算机有机连接起来要遵循规定的约定和规则,称之为( ).\\\"; 更多相关问题 在地方性分异因素作用下,土地类型的分布 ...

  5. 宏定义中的 ## ... __VA_ARGS__

    宏定义中的##操作符和... and _ _VA_ARGS_ _ 1.Preprocessor Glue: The ## Operator 预处理连接符:##操作符 Like the # operat ...

  6. python函数定义中没有对参数指定类型、这说明_二级单选-函数和代码复用

    . i. .w. 1 关于递归函数的描述,以下选项中正确的是 A 函数部包含对本函数的再次调用 B 函数比较复杂 C 包含一个循环结构 D 函数名称作为返回值 正确答案: A 2 关于递归函数基例的说 ...

  7. 关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...

    关于Python程序中与"缩进"有关的说法中,以下选项中正确的是() 答:缩进在程序中长度统一且强制使用 同文学或同音乐主题的民歌,<_______>是其中之一.此曲经 ...

  8. python函数定义中参数列表里的参数是_详解Python函数中参数带星号是什么意思

    函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数. 一.参数收集的定义 Python的函数支持可变不定数量的参数 ...

  9. #与##在宏定义中的--宏展开

    #与##在宏定义中的--宏展开 #include <stdio.h> #define f(a,b) a##b #define g(a) #a #define h(a) g(a) int m ...

最新文章

  1. NIPS 2017录用论文先睹为快!论文作者清华专场分享(附PPT下载)
  2. python字符串写入excel-python 将数据写入excel
  3. 92. Leetcode 63. 不同路径 II (动态规划-路径规划)
  4. Kick Start 2019 Round D
  5. 多媒体技术创新开启“科技+文化”新“视”界
  6. Andriod中的两种自定义颜色选择器
  7. OpenCV3学习(6.1)——边缘检测---Canny,Sobel,Prewitt,Robert,Laplace,LOG,DOG算子
  8. 运行Gazebo出现[Err] [REST.cc:205] Error in REST reques
  9. Exchange邮件跟踪日志不得不了解的知识
  10. 同步、异步的使用场景及好处
  11. 屏蔽键盘信息(低级键盘钩子)
  12. 用Python爬取东方财富网上市公司财务报表
  13. HDU6069 欧拉筛法+约数定理+计算技巧。
  14. 电路抗干扰设计——非常详细
  15. 只需Ctrl+T,让 Excel 变身为「超级表格」
  16. 手把手带你 arduino 开发:基于ESP32S 的第一个应用-红外测温枪(带引脚图)
  17. c语言孙力课后作业答案,课后作业答案
  18. 永磁同步电机电阻、电感、惯量、转矩系数、反电势系数、极对数、编码器零位等一系列的参数辩识方法,电流速度环pi参数整定方法
  19. 时频分析在工程中的应用
  20. 批量修改或替换文件名中的字符

热门文章

  1. Django模型层的多表操作(2)
  2. Mysqli面向对象操作数据库
  3. 获取执行计划的N种方式
  4. Angular16 Angular整合zTree、异步加载节点数据
  5. 盗COOKIE之方法总结
  6. C# 重写WndProc及发送消息
  7. c语言求成绩标准差,C程序计算标准偏差
  8. 文件包含——远程包含shell(三)
  9. mysql的innodb如何定位锁问题_mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?...
  10. QSplitter分割器窗口比例设定