Mongoose中哪个SchemaType最适合时间戳?

Lia*_*atz 63 schema mongoose mongodb node.js

我正在使用Mongoose,MongoDB和Node.

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

我想使用此字段以返回在过去5分钟内已更新的所有记录.

由于在Mongoose中我不能使用Timestamp()方法,我理解我唯一的选择是使用以下Javascript方法:

time : { type: Number, default: (new Date()).getTime() } 
Run Code Online (Sandbox Code Playgroud)

它可能不是查询庞大数据库的最有效方式.如果有人可以分享一种更有效的方式来实现这一点,我将非常感激.

有没有办法用Mongoose实现这个并且能够使用MongoDB时间戳?

dri*_*hev 108

编辑 - 2016年3月20日

Mongoose现在支持集合的时间戳.

请考虑以下@bobbyz的答案.也许这就是你要找的东西.

原始答案

Mongoose支持一种Date类型(基本上是一个时间戳):

time : { type : Date, default: Date.now }
Run Code Online (Sandbox Code Playgroud)

使用上述字段定义,只要您使用未设置time字段保存文档,Mongoose就会使用当前时间填写此字段.

资料来源:http://mongoosejs.com/docs/guide.html

  • 应该是`Date.now`而不是`Date.now()`. (17认同)
  • 说明:`Date.now`因为`Date.now`是一个在制作对象时运行的函数.`Date.now()`是解析`models.js`的日期.即,如果使用`Date.now()`,所有对象都将具有相同的日期,那将是解析`models.js`的日期. (14认同)

bob*_*byz 96

当前版本的Mongoose(v4.x)将时间戳记作为模式的内置选项:

var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );
Run Code Online (Sandbox Code Playgroud)

此选项添加了带有时间戳的a createdAtupdatedAt属性Date,并为您完成所有工作.每次更新文档时,它都会更新updatedAt属性.架构时间戳文档.

  • 谢谢,文档不清楚是否可以使用 `timestamps: true` 而不是使用 `timestamps: {...}` 覆盖名称。 (4认同)
  • @tar 我认为它仍然有效,但 4.x 文档曾经特别提到 `timestamps: true`,因此可能需要一些额外的考虑。(也许他们正在弃用它?您说得对,文档对此选项不是很清楚。) (2认同)

ceg*_*ash 22

如果您想为您的createdAtupdatedAt

const mongoose = require('mongoose');  
const { Schema } = mongoose;
    
const schemaOptions = {
  timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' },
};

const mySchema = new Schema({ name: String }, schemaOptions);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你!!!这非常有帮助。正在搜索文档,但找不到如何执行此操作。再次感谢您的分享。 (2认同)

Nik*_*y_R 9

var ItemSchema = new Schema({
    name : { type: String }
});

ItemSchema.set('timestamps', true); // this will add createdAt and updatedAt timestamps
Run Code Online (Sandbox Code Playgroud)

文档:https : //mongoosejs.com/docs/guide.html#timestamps

  • 我们可以将“{ timestamps: true }”作为“new Schema({}, {<here>})”中的第二个参数传递。 (4认同)