Mongoose 日期字段 - 将默认设置为 date.now + N 天

Posted

技术标签:

【中文标题】Mongoose 日期字段 - 将默认设置为 date.now + N 天【英文标题】:Mongoose date field - Set default to date.now + N days 【发布时间】:2015-07-06 02:39:29 【问题描述】:

在猫鼬模式中,例如:

var EventSchema = new Schema(
	title: 
		type: String,
		default: '',
		trim: true,
		required: 'Title cannot be blank'
	,
	description: 
		type: String,
		default: '',
		trim: true
	,
	start: 
		type: Date,
		default: Date.now,
		required: 'Must have start date - default value is the created date'
	,
	end: 
		type: Date,
		default: Date.now + 7 Days, // Date in one week from now
		required: 'Must have end date - default value is the created date + 1 week'
	,
	tasks: [
		type: Schema.ObjectId,
		ref: 'Task'
	]
);

在“结束”字段的行中,默认日期应设置为 +7 天。我可以添加 presave 挂钩并将其设置在那里,但想知道是否有办法在默认字段中内联执行此操作。

【问题讨论】:

【参考方案1】:

您可以像这样将 7 天转换为毫秒数添加到当前日期

default: new Date(+new Date() + 7*24*60*60*1000)

甚至像这样

default: +new Date() + 7*24*60*60*1000

更新

请查看下面的@laggingreflex 评论。您需要将函数设置为默认值:

default: () => new Date(+new Date() + 7*24*60*60*1000)

【讨论】:

太棒了!完美运行 这会产生相同的日期(+ndays)运行应用程序时计算。 IE。如果您的应用程序已经运行了 n 天以上,您将设置过去的日期!为了纠正这个问题,它应该被包裹在一个函数 default: function()return +new Date() + 7*24*60*60*1000 为什么要在new Date()前面加上+ @Gurbakhshish Singh + 转换为数字而不是我认为的日期对象。 此代码+new Date() 存在性能问题。我已经确定了自己的答案,以避免混淆人们。每次调用此代码都会创建 Date 实例。所以它给垃圾收集器带来了额外的压力。为避免这种情况,请使用Date.now().now() 方法对于 Data 类是静态的,它只返回数值。所以垃圾收集不应该丢弃创建的Date 实例。希望这会有所帮助,亲切的问候。【参考方案2】:
default: () => Date.now() + 7*24*60*60*1000

这就够了

【讨论】:

以上是关于Mongoose 日期字段 - 将默认设置为 date.now + N 天的主要内容,如果未能解决你的问题,请参考以下文章

将 Mongoose 文档中的默认日期设置为 now + [一些增量]

将 Mongoose 文档中的默认日期设置为 now + [一些增量]

Mongoose 将默认设置为空对象

Mongoose 将默认设置为空对象

如果字段设置为 null,则恢复为 mongoose 中的默认值

sql 将默认日期设置为现有字段