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自动生成和管理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字段的值。


本文转自Jaxu博客园博客,原文链接:http://www.cnblogs.com/jaxu/p/5595451.html,如需转载请自行联系原作者


相关文章
|
8月前
|
数据库
egg.js 24.9sequelize模型-批量新增和修改器
egg.js 24.9sequelize模型-批量新增和修改器
82 0
egg.js 24.9sequelize模型-批量新增和修改器
|
索引
29dwr - engine.js 功能(选项索引)
29dwr - engine.js 功能(选项索引)
25 0
|
数据处理 数据格式
hook项目实例之原始数据形成ant design table表格 2
hook项目实例之原始数据形成ant design table表格
74 0
|
数据格式
hook项目实例之原始数据形成ant design table表格
hook项目实例之原始数据形成ant design table表格
48 0
|
JavaScript 前端开发 API
Vue 实例及构造选项 options
Vue 实例及构造选项 options
165 0
ant Table表格的一些常用的小功能以及常见的报错解决方法
ant Table表格的一些常用的小功能以及常见的报错解决方法
109 0
element plus 表单验证的字段名解释以及使用方法
element plus 表单验证的字段名解释以及使用方法
188 0
|
JavaScript
vuejs+typescrpt使用变量获取this属性报错解决办法 Element implicitly has
vuejs+typescrpt使用变量获取this属性报错解决办法 Element implicitly has
vuejs+typescrpt使用变量获取this属性报错解决办法 Element implicitly has
abap开发function module时使用tables传递参数报错过时的解决方法
如下图,我写了一个Function Module我要在tables中添加一个参数TABLES参数已过时不管怎么点击保存按钮,一直报错,怎么办呢?不管是不是过时,狂点回车,就保存了
1762 0