更新:(5年后)
注意:如果您决定使用Kappa体系结构(Event Sourcing + CQRS),则根本不需要更新日期。由于数据是不可变的,仅追加事件日志,因此您只需要事件创建日期。与Lambda体系结构类似,如下所述。然后,您的应用程序状态就是事件日志(衍生数据)的投影。如果您收到有关现有实体的后续事件,则将使用该事件的创建日期作为实体的更新日期。这是胶束服务系统中的一种常用(并且常常被误解)的做法。
更新:(4年后)
如果您将其ObjectId
用作_id
字段(通常是这种情况),那么您要做的就是:
let document = {
updatedAt: new Date(),
}
查看下面有关如何从_id
现场获取创建的时间戳的原始答案。如果您需要使用外部系统的ID,请检查Roman Rhrn Nesterov的答案。
更新:(2.5年后)
现在,可以将#timestamps选项与猫鼬版本> = 4.0一起使用。
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
如果设置了时间戳,猫鼬为您的模式分配了createdAt
和updatedAt
域,则分配的类型为Date
。
您还可以指定时间戳文件的名称:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
注意:如果您正在处理具有关键数据的大型应用程序,则应重新考虑更新文档。我建议您使用不可变的仅追加数据(lambda体系结构)。这意味着您只允许插入。不允许更新和删除!如果您要“删除”记录,则可以轻松插入带有timestamp
/ 字段的文档的新版本,version
然后将deleted
字段设置为true
。同样,如果您要更新文档,请创建一个新的文档,并更新相应的字段,然后复制其余字段。然后,要查询该文档,您将得到一个带有最新时间戳或最高版本的文档。而不是“删除”(deleted
字段未定义或为false”)。
数据不变性确保您的数据可调试–您可以跟踪每个文档的历史记录。如果出现问题,您还可以回滚到文档的先前版本。如果您采用这样的架构ObjectId.getTimestamp()
,则只需要它,它就不依赖于猫鼬。
原始答案:
如果您使用ObjectId作为标识字段,则不需要该created_at
字段。ObjectIds有一个称为的方法getTimestamp()
。
ObjectId(“ 507c7f79bcf86cd7994f6c0e”)。getTimestamp()
这将返回以下输出:
ISODate(“ 2012-10-15T21:26:17Z”)
这里的更多信息如何从Mongo ObjectID中提取创建的日期
为了添加updated_at
文件,您需要使用以下命令:
var ArticleSchema = new Schema({
updated_at: { type: Date }
// rest of the fields go here
});
ArticleSchema.pre('save', function(next) {
this.updated_at = Date.now();
next();
});