我一直在尝试找到一种方法来强制执行模式的默认值,以便在插入时使用默认值,而不管任何输入参数。换句话说,模式的属性应始终具有默认值,如果在插入/写入时传递任何其他参数,则将忽略传递参数。
作为示例,请参阅下面的虚拟架构。我想强制执行的属性是MySchema.created
,它应该存储文档创建时刻的时间戳。
var mongoose = require("mongoose");
var MySchema = new mongoose.Schema({
sendStatus: {
type: String,
enum: ["notsent", "sent", "failed"],
default: "notsent"
},
created: {
type: Date,
default: Date.now
},
creator: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true
}
});
我没有在Mongoose文档中找到答案(http://mongoosejs.com/docs/defaults.html),尽管它确实提到setDefaultsOnInsert
,这听起来有点接近。尽管我想在架构级别上进行所有架构验证和强制执行,以避免开发错误和复制粘贴代码。此外,我不知道如何在此时间戳中使用setDefaultsOnInsert
,因为我希望保持它也是常量,而不是在文档更新时更新它。
这有可能实现吗?在文档上有一个可靠的创建日期必须是一个非常常见的用例,但不知何故,我在互联网上找不到令人满意的答案。谢谢!
答案 0 :(得分:0)
您只需将Mongoose timestamps添加到架构的末尾,它就会为新的/更新的文档添加时间戳
var MySchema = new mongoose.Schema({
sendStatus: {
type: String,
enum: ["notsent", "sent", "failed"],
default: "notsent"
},
creator: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true
}
},{
timestamps:
{
createdAt: 'created_at',
updatedAt: 'updated_at' //leave this out if of no interest
}
});