Eri*_*k B 13
我知道这是一个古老的问题,但接受的答案并不能恰当地解释这种差异.它解释了行为的差异,但不解释它的实际工作方式.
在mongoose模式中,您default可以是指定类型的值,也可以是返回指定类型值的函数.Date.now是一个内置的Javascript函数,它返回当前的unix时间戳作为数字.
如果您通过Date.now为default您的mongoose模式,要传递的功能,mongoose每一个文件需要该属性的默认值时会调用该函数.这导致了当前的时间,在时间文档的创建,存储作为该属性的值.
但是,如果您传递Date.now(),则传递的是返回的值Date.now()而不是函数.通过执行此操作,您的文档将在架构创建时获取当前时间作为该属性的默认值.这意味着您的文档将存储最新部署的时间,这可能不是您想要的.
如果Date.now接受的答案所示,如果一个常量"由Mongoose替换为创建新记录时的当前日期时间",那么以下内容应该在逻辑上起作用:
validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
Run Code Online (Sandbox Code Playgroud)
但Date.now不是神奇地取代mongoose,它是一个功能,你不能为一个功能添加一个数字.但是,您可以在自己的函数中调用函数并在结果中添加一个数字,如下所示:
validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
Run Code Online (Sandbox Code Playgroud)
由于从接受的答案中不清楚这Date.now是一个功能而不是一个mongoose常数,我想澄清一下.Date.now()和之间的区别Date.now是Date.now()调用函数并返回结果,同时Date.now返回函数本身.
Ale*_*lex 11
Date.now可以在Mongoose模式定义中用于设置字段的默认值,而Date.now()JavaScript是等效的.例如,在架构定义中设置默认值时,使用Date.now.使用此模式定义,Mongoose将填充createdDate当前时间.
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//schema
var yourSchema= new Schema({
text: {type: String},
createdAt: {type: Date, default: Date.now}
});
Run Code Online (Sandbox Code Playgroud)
但是,在针对您的架构编写JavaScript代码时,您必须使用 Date.now()
yourSchema.pre('save', function doSomething(next){
var something = this;
something.createdAt(Date.now());
next();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7325 次 |
| 最近记录: |