【发布时间】:2018-07-31 08:57:34
【问题描述】:
我一直在尝试找到一种方法来强制执行架构的默认值,以便在插入时使用默认值,而不管任何输入参数。换句话说,模式的属性应该始终具有默认值,如果在插入/写入时传递了任何其他参数,则传递的参数将被忽略。
例如,请参阅下面的虚拟架构。我要强制执行的属性是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 用于此时间戳,因为我希望它也保持不变,而不是在文档更新时更新它。
这有可能实现吗?在文档上拥有可靠的创建日期一定是一个非常常见的用例,但不知何故,我无法在互联网上找到令人满意的答案。谢谢!
【问题讨论】:
标签: javascript node.js mongodb mongoose