node.js-猫鼬中哪种SchemaType最适合时间戳?

我正在使用Mongoose,MongoDB和Node。

我想定义一个架构,其中的一个字段是date \ timestamp。

我想使用此字段来返回最近5分钟内已更新的所有记录。

由于在Mongoose中我无法使用Timestamp()方法,因此我了解到,我唯一的选择是使用以下Javascript方法:

time : { type: Number, default: (new Date()).getTime() } 

这可能不是查询庞大数据库的最有效方法。如果有人可以分享一种更有效的实施方法,我将非常感激。

有什么办法可以用Mongoose来实现,并且可以使用MongoDB时间戳吗?

Liatz asked 2019-10-06T17:17:24Z
4个解决方案
102 votes

编辑-2016年3月20日

猫鼬现在支持集合的时间戳。

请考虑以下@bobbyz的答案。 也许这就是您想要的。

原始答案

猫鼬支持time类型(基本上是时间戳):

time : { type : Date, default: Date.now }

使用以上字段定义,每当您保存未设置time字段的文档时,Mongoose都会使用当前时间填写该字段。

来源:[http://mongoosejs.com/docs/guide.html]

drinchev answered 2019-10-06T17:18:12Z
85 votes

当前版本的Mongoose(v4.x)具有时间戳,作为架构的内置选项:

var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );

此选项将添加createdAtupdatedAt属性,并为Date加盖时间戳,这些属性将为您完成所有工作。 每当您更新文档时,它都会更新updatedAt属性。 架构时间戳文档。

bobbyz answered 2019-10-06T17:18:44Z
0 votes

我想使用此字段来返回最近5分钟内已更新的所有记录。

这意味着您每次保存对象时都需要将日期更新为“现在”。 也许您会发现这很有用:Moongoose创建修改后的插件

Fletch answered 2019-10-06T17:19:18Z
0 votes
var ItemSchema = new Schema({
    name : { type: String }
});

ItemSchema.set('timestamps', true); // this will add createdAt and updatedAt timestamps

文件:[https://mongoosejs.com/docs/guide.html#timestamps]

Nikolay_R answered 2019-10-06T17:19:47Z
translate from https://stackoverflow.com:/questions/10006218/which-schematype-in-mongoose-is-best-for-timestamp