【问题标题】:Enforcing the default value in Mongoose schema在 Mongoose 模式中强制执行默认值
【发布时间】: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


    【解决方案1】:

    您可以简单地将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 
                      }
                 });
    

    【讨论】:

    • 这似乎有效并且可以做我想做的事情。我会接受这个答案,即使这只是解决我关于时间戳的具体问题,而不是一般强制执行默认值。谢谢。
    • 我不得不对此投反对票,因为它没有回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多