Mongoose Schemas中定义日期以及timestamps选项的妙用

 本文转自:http://www.cnblogs.com/jaxu/p/5595451.html

在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字段的值。

时间: 2024-11-06 03:37:17

Mongoose Schemas中定义日期以及timestamps选项的妙用的相关文章

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:

Java8中时间日期库的20个常用使用示例

除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用Java 8的这套API.Java对日期,日历及时间的处理一直以来都饱受诟病,尤其是它决定将java.util.Date定义为可修改的以及将SimpleDateFormat实现成非线程安全的.看来Java已经意识到需要为时间及日期功能提供更好的支持了,这对已经习惯使用Joda时间日期库的社区而言也是件好事.关于这个新的时间日期库的最大的优点

在Java 8中如何处理日期和时间

常有人问我学习一个新库的最好方式是什么?我的答案是在实际项目中使用它.项目中有很多真正的需求驱使开发者去发掘并学习新库.简单得说就是任务驱动学习探 索.这对Java 8新日期时间API也不例外.我创建了20个基于任务的实例来学习Java 8的新特性.从最简单创建当天的日期开始,然后创建时间及时区,接着模拟一个日期提醒应用中的任务--计算重要日期的到期天数,例如生日.纪念日.账单 日.保费到期日.信用卡过期日等.示例 1.在Java 8中获取今天的日期Java 8 中的 LocalDate 用于表

20 个案例教你在 Java 8 中如何处理日期和时间?

前言 前面一篇文章写了<SimpleDateFormat 如何安全的使用?>, 里面介绍了 SimpleDateFormat 如何处理日期/时间,以及如何保证线程安全,及其介绍了在 Java 8 中的处理时间/日期默认就线程安全的 DateTimeFormatter 类.那么 Java 8 中该怎么样处理生活中常见的一些日期/时间呢?比如:计算一周后的日期:计算一年前或一年后的日期:检查闰年等. 接下来创建了 20 个基于任务的实例来学习 Java 8 的新特性.从最简单创建当天的日期开始,然

在 Java 8 中获取日期

前言 前面一篇文章写了<SimpleDateFormat 如何安全的使用?>, 里面介绍了 SimpleDateFormat 如何处理日期/时间,以及如何保证线程安全,及其介绍了在 Java 8 中的处理时间/日期默认就线程安全的 DateTimeFormatter 类.那么 Java 8 中该怎么样处理生活中常见的一些日期/时间呢?比如:计算一周后的日期:计算一年前或一年后的日期:检查闰年等. 接下来创建了 20 个基于任务的实例来学习 Java 8 的新特性.从最简单创建当天的日期开始,然

Java中的日期操作

Date : getTime() .setTime() SimpleDateFormate :   Formate(Date). parse(String s) Calendar : getInstance().set() .get().getActualMaximum().add().  gettime().setTime(Date). 字符串.Date.Calendar之间的转换 ---------------------------------------淫荡分隔-------------

[转帖] 关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决

原文:http://www.cnblogs.com/qinfengxiaoyue/archive/2013/02/01/2889668.html 转自:http://hi.baidu.com/qinfengxiaoyue/item/ff262ccfb53b4c2ba0b50a89 引自:http://blog.csdn.net/sptoor/archive/2011/02/23/6203376.aspx 对全文有改动. 提示:阅读前需要对静态库(.lib).动态库(.dll).导入库(这个还是.

makefile 中定义宏位置需要注意一下

1 CUR_DIR = $(shell pwd) 2 3 CFLAGS = -g -Wall 4 GCC = gcc 5 GXX = g++ 6 7 TARGET = exe.out 8 9 SRC_FILES += $(shell find $(CUR_DIR) -name *.cc) 10 += $(shell find $(CUR_DIR) -name *.cpp) 11 12 OBJS = fatal-impl.o log.o 13 14 INCLUDE += -I. 15 RM = r

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------&gt; 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J