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

HdN*_*dN8 17 javascript mongoose

在mongoose模式中,例如:

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'
	}]
});
Run Code Online (Sandbox Code Playgroud)

在"结束"字段的行上,默认日期应设置为+7天.我可以添加预设钩子并将其设置在那里,但想知道是否有一种方法可以在默认字段中内联.

Ach*_*ian 28

default: () => Date.now() + 7*24*60*60*1000
Run Code Online (Sandbox Code Playgroud)

这就足够了


Vik*_*eev 14

您可以将7天转换为毫秒转换为当前日期

default: new Date(+new Date() + 7*24*60*60*1000)
Run Code Online (Sandbox Code Playgroud)

或者甚至喜欢这个

default: +new Date() + 7*24*60*60*1000
Run Code Online (Sandbox Code Playgroud)

  • 这导致相同的日期(+ ndays)**,它是在运行应用程序**时*计算的.即如果您的应用程序运行超过n天,您将在过去设置日期!要纠正这个问题,它应该包含在一个函数中:default:function(){return + new Date()+ 7*24*60*60*1000}` (42认同)
  • 这段代码`+ new Date()`有性能问题.我已经修复了自己的答案,以避免混淆人.此代码每次调用时都会创建Date实例.所以它给垃圾收集器带来了额外的压力.要避免这种情况,请使用`Date.now()`.`.now()`方法对于Data类是静态的,它只返回数值.所以垃圾收集不应该废弃创建的`Date`实例.希望这有帮助,亲切的问候. (3认同)
  • 为什么要在`new Date()`前面添加`+` (2认同)