【问题标题】:Auto update the date with mongoose使用猫鼬自动更新日期
【发布时间】:2020-12-14 08:39:28
【问题描述】:

在我的猫鼬模式中,如下所示:

mongoose.Schema({
    "name": String,
    "items": [
        {
            "class": String,
            "source": String,
            "createdAt": { type: Date, default: Date.now },
            "updatedAt": { type: Date, default: Date.now }
        }
    ],
}, { versionKey: false });

当我插入新记录时,createdAt 和 updatedAt 会自动填充。这可以。如下运行更新查询时,我怎样才能达到同样的效果:

model.update({name: "myname"}, {$set: {class: "...", updatedAt: "somedate"}})

目前,我必须明确指定updatedAt 的值。我想让猫鼬处理这个。每当更新数组items 中的项目时,该项目的updatedAt 必须自动更新。猫鼬可以做到这一点吗?

【问题讨论】:

  • 在您设置versionKey: false 的对象中,将另一个属性设置为timestamps: true
  • @Chris 文档说if true, Mongoose adds createdAt and updatedAt properties to your schema and manages those properties for you. 这是否意味着它会在架构中强制使用这些属性?我只需要数组items 中的createdAt 和updatedAt。
  • 哦,我明白了。嗯,这很有趣。您是对的,这些将被添加到您的顶级架构中,但也应该更新子架构时间戳。你看过猫鼬钩吗?您可以在某些查询发生之前挂钩它们,并在它们保存之前进行修改。
  • 有这个答案stackoverflow.com/a/58665631/5140389 可能会被修改以配合你想做的事情。

标签: javascript mongodb mongoose schema


【解决方案1】:

使用mongoose.Schema() 尝试此架构以获取子文档

mongoose.Schema({
    "name": String,
    "items": [
        mongoose.Schema({
            "class": String,
            "source": String,
            "createdAt": { type: Date, default: Date.now },
            "updatedAt": { type: Date, default: Date.now }
        },
        { timestamps: true })
    ],
}, { versionKey: false });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 2020-05-03
    • 2012-02-17
    • 2020-02-10
    • 2012-03-28
    • 2018-07-05
    • 2013-05-15
    • 2016-10-01
    相关资源
    最近更新 更多