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

时间:2012-04-04 06:51:11

标签: node.js mongodb mongoose schema

我正在使用Mongoose,MongoDB和Node。

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

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

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

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

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

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

8 个答案:

答案 0 :(得分:104)

编辑 - 2016年3月20日

Mongoose现在支持timestamps for collections

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

原始答案

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

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

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

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

答案 1 :(得分:88)

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

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

此选项会添加createdAtupdatedAt属性,这些属性会以Date为时间戳,并为您完成所有工作。每次更新文档时,它都会更新updatedAt属性。 Schema Timestamps Docs.

答案 2 :(得分:3)

如果要为createdAt和updatedAt定义自定义名称

const mongoose = require('mongoose');  
const { Schema } = mongoose;

const schemaOptions = {
  timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' },
};

const mySchema = new Schema({ name: String }, schemaOptions);

答案 3 :(得分:1)

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

答案 4 :(得分:1)

Mongoose 现在支持架构中的时间戳。

const item = new Schema(
  {
    id: {
      type: String,
      required: true,
    },
  { timestamps: true },
);

这将在每条记录创建时添加 createdAtupdatedAt 字段。

时间戳接口有字段

  interface SchemaTimestampsConfig {
    createdAt?: boolean | string;
    updatedAt?: boolean | string;
    currentTime?: () => (Date | number);
  }

这将帮助我们选择我们想要的字段并覆盖日期格式。

答案 5 :(得分:0)

  

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

这意味着每次保存对象时都需要将日期更新为“now”。也许你会觉得这很有用:Moongoose create-modified plugin

答案 6 :(得分:0)

第一位:npm install mongoose-timestamp

下一步:let Timestamps = require('mongoose-timestamp')

下一步:let MySchema = new Schema

下一步:MySchema.plugin(Timestamps)

下一步:const Collection = mongoose.model('Collection',MySchema)

然后,您可以在需要的任何地方使用Collection.createdAtCollection.updatedAt

创建于:星期几月日期年00:00:00 GMT

时间是这种格式。

答案 7 :(得分:0)

new mongoose.Schema({
    description: {
        type: String,
        required: true,
        trim: true
    },
    completed: {
        type: Boolean,
        default: false
    },
    owner: {
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: 'User'
    }
}, {
    timestamps: true
});