105

我正在使用 Mongoose、MongoDB 和 Node。

我想定义一个模式,其中一个字段是日期\时间戳。

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

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

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

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

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

4

8 回答 8

160

编辑 - 2016 年 3 月 20 日

Mongoose 现在支持集合的时间戳

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

原始答案

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

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

使用上面的字段定义,任何时候你保存一个未设置time字段的文档,Mongoose 都会用当前时间填充这个字段。

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

于 2012-04-04T07:06:05.807 回答
140

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

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

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

于 2015-12-21T15:11:43.740 回答
25

如果您想为您的createdAtupdatedAt

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

const mySchema = new Schema({ name: String }, schemaOptions);
于 2019-08-23T08:09:23.327 回答
10
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

于 2019-03-04T07:41:59.907 回答
1
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
});
于 2021-02-01T05:43:10.017 回答
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);
  }

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

于 2021-02-23T13:32:35.450 回答
0

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

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

于 2013-03-12T06:17:43.580 回答
-4

第一的 :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

时间就是这种格式。

于 2019-06-13T08:16:19.610 回答