我在mongoose模型中使用Date.now()
和Date.now
。
我对它们之间的区别感到有点困惑。你能帮我吗?
答案 0 :(得分:9)
我知道这是一个老问题,但是被接受的答案并不能正确解释差异。它解释了行为上的差异,但没有解释其实际工作原理。
在您的mongoose
模式中,您的default
可以是指定类型的值,也可以是返回指定类型的值的函数。 Date.now
是内置的Javascript函数,它以数字形式返回当前的unix时间戳。
如果在Date.now
模式中将default
作为mongoose
传递,则说明您正在传递函数,并且mongoose
会在每次文档需要默认值时调用该函数。对于那个财产。这样会导致当前时间(在创建文档 时)存储为该属性的值。
但是,如果您改为传递Date.now()
,则将传递Date.now()
返回的值,而不是函数。这样,您的文档将在 schema 创建时获得当前时间,作为该属性的默认值。这意味着您的文档将存储最新部署的时间,这可能不是您想要的。
如果Date.now
是一个常量,如接受的答案所建议,“用猫鼬在创建新记录时将其替换为当前日期时间”,则以下内容应在逻辑上起作用:
validUntil: {
type: Date,
default: Date.now + 3*60*60*1000 // 3 hours from now
}
但是Date.now
并没有被mongoose
神奇地替代,它是一个函数,您不能在函数中添加数字。但是,您可以在自己的函数内调用一个函数,并在结果中添加一个数字,如下所示:
validUntil: {
type: Date,
default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}
由于接受的答案尚不清楚Date.now
是一个函数,而不是mongoose
常量,所以我想澄清一下。 Date.now()
和Date.now
之间的区别在于Date.now()
调用函数并返回结果,而Date.now
返回函数本身。
答案 1 :(得分:8)
Date.now
来设置字段的默认值,而createdDate
是JavaScript的等效值。例如,在架构定义中设置默认值时,使用var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//schema
var yourSchema= new Schema({
text: {type: String},
createdAt: {type: Date, default: Date.now}
});
。使用此架构定义,Mongoose将使用当前时间填充Date.now()
。
yourSchema.pre('save', function doSomething(next){
var something = this;
something.createdAt(Date.now());
next();
});
但是,在针对您的架构编写JavaScript代码时,您必须使用vector<int> arr[N];
vector<vector<int> > N vs vector<int> F[N]