Mongoose 向 MongoDB 新增数据时的时间字段填充
在使用 Mongoose 连接 MongoDB 数据库时,我们经常需要向其中新增数据。在新增数据时,为了方便记录数据的变更时间,我们需要自动生成时间字段,并将其填充至数据库中。本文将介绍在使用 Mongoose 向 MongoDB 新增数据时,如何自动生成时间字段并进行填充。
- 定义 Schema
首先,我们需要定义一个 Schema,用于描述数据的存储结构。在定义 Schema 时,我们需要添加 createdAt 和 updatedAt 字段,用于记录数据的创建时间和更新时间。在 Mongoose 中,我们可以使用 Date 类型来存储时间戳。
例如,下面是一段常见的 Schema 定义代码:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------------- - --- ----------------- ----- ------- ------------ ------- ---------- - ----- ----- -------- --------- -- ---------- - ----- ----- -------- --------- -- ---
在上面的代码中,我们定义了一个 exampleSchema,其中包含了 name、description、createdAt 和 updatedAt 四个字段。其中,createdAt 和 updatedAt 字段都使用了 Date 类型,并设置了默认值为 Date.now()。
- 使用 middleware 自动填充时间字段
在定义了 Schema 之后,我们需要使用 middleware 来自动填充时间字段。Mongoose 提供了 pre() 和 post() 两个方法,分别用于在数据保存之前和保存之后执行一些操作。我们可以结合这两个方法来自动填充时间字段。
例如,下面是一段自动填充时间字段的 middleware 代码:
exampleSchema.pre('save', function (next) { const now = Date.now(); this.updatedAt = now; if (!this.createdAt) { this.createdAt = now; } next(); });
在上面的代码中,我们使用 pre() 方法添加了一个保存前的 middleware,该方法接受一个回调函数作为参数。在回调函数中,我们首先获取当前时间戳,然后将其赋值给 updatedAt 字段。接着,我们判断 createdAt 是否已有值,如果没有,则将当前时间戳赋值给它。最后,我们调用 next() 方法,将流程传递下去。
- 新增数据
在定义了 Schema 和 middleware 之后,我们就可以新增数据了。在新增数据时,我们只需要创建一个新的 Model 实例并调用 save() 方法即可。在执行 save() 方法时,保存前的 middleware 会自动执行,自动填充时间字段。
例如,下面是一段新增数据的示例代码:
const ExampleModel = mongoose.model('Example', exampleSchema); const example = new ExampleModel({ name: 'example', description: 'this is an example', }); example.save();
在上面的代码中,我们首先创建了一个 ExampleModel,并传入了之前定义的 exampleSchema。然后,我们创建了一个新的 example 实例,并设置了 name 和 description 字段的值。最后,我们调用 save() 方法,自动保存数据,并自动填充了 createdAt 和 updatedAt 字段的值。
- 总结
在本文中,我们介绍了如何使用 Mongoose 向 MongoDB 新增数据时自动生成时间字段,并进行填充的方法。首先,我们定义了一个 Schema,用于描述数据的存储结构,并添加了 createdAt 和 updatedAt 字段。然后,我们使用 middleware 自动填充时间字段,并在调用 save() 方法时自动触发。通过本文,我们希望读者可以更加深入地理解 Mongoose 和 MongoDB 的使用,以及相关的技巧和注意事项。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e486a9f6b2d6eab3ffcaf6