NodeJS Mongoose中哪种SchemaType最适合时间戳?

pxyaymoc  于 2022-11-22  发布在  Node.js
关注(0)|答案(9)|浏览(146)

我使用的是Mongoose、MongoDB和Node。
我想定义一个模式,其中一个字段是日期\时间戳。
我希望使用此字段返回最近5分钟内更新的所有记录。
由于在Mongoose中我不能使用Timestamp()方法,我知道我唯一的选择是使用下面的Javascript方法:

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

这可能不是查询庞大数据库的最有效方法。如果有人能分享一种更有效的实现方法,我将非常感激。
有没有办法用Mongoose来实现这一点,并且能够使用MongoDB时间戳?

4smxwvx5

4smxwvx51#

编辑-2016年3月20日

Mongoose现在支持集合的时间戳。
请考虑一下answer of @bobbyz below,也许这就是你要找的。

原始答案

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

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

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

1qczuiv0

1qczuiv02#

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

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

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

gopyfrb3

gopyfrb33#

如果您需要为createdAtupdatedAt自定义名称

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

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

6tdlim6h4#

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

wr98u20j

wr98u20j5#

Mongoose 现在 支持 模式 中 的 时间 戳 。

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

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

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

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

crcmnpdw

crcmnpdw6#

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

pzfprimi7#

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

cyej8jka

cyej8jka8#

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

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

Sample doc in Mongo DB

gcxthw6b

gcxthw6b9#

第一个: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
时间采用此格式。

相关问题