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

oyjwcjzk  于 2023-10-16  发布在  Go
关注(0)|答案(9)|浏览(99)

我正在使用Mongoose,MongoDB和Node.js。
我想定义一个模式,其中一个字段是日期\时间戳。
我想使用此字段,以返回在过去5分钟内更新的所有记录。
由于在Mongoose中我不能使用Timestamp()方法,我明白我唯一的选择是使用以下JavaScript方法:

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

这可能不是查询大型数据库的最有效方法。有没有更有效的方法来实现这一点。
有没有一种方法可以用Mongoose实现这一点,并能够使用MongoDB时间戳?

k2arahey

k2arahey1#

2016年3月20日星期一
Mongoose现在支持收藏的时间戳。
请考虑answer of @bobbyz below。也许这就是你要找的。

原始答案

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

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

使用上面的字段定义,任何时候你保存一个带有未设置time字段的文档,Mongoose都会用当前时间填充这个字段。
来源:http://mongoosejs.com/docs/guide.html

gmxoilav

gmxoilav2#

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

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

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

egmofgnx

egmofgnx3#

如果您想为createdAtupdatedAt自定义名称,

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

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

jtjikinw4#

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

1rhkuytd

1rhkuytd5#

Mongoose现在支持schema中的时间戳。

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

这将在创建的每个记录上添加createdAtupdatedAt字段。
时间戳接口具有字段

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

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

kyxcudwk

kyxcudwk6#

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
});
kt06eoxx

kt06eoxx7#

我想使用此字段,以便返回在过去5分钟内更新的所有记录。
这意味着每次保存对象时都需要将日期更新为“现在”。也许你会发现这很有用:Moongoose create-modified plugin

mdfafbf1

mdfafbf18#

您可以使用timestamps:true沿着toDateString来获取创建和更新日期。

const SampleSchema = new mongoose.Schema({
    accountId: {
        type: String,
        required: true
    }
    }, {
       timestamps: true,
       get: time => time.toDateString()
    });

Sample doc in Mongo DB

bd1hkmkf

bd1hkmkf9#

第一个: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
时间就是这种格式。

相关问题