我有以下型号
const assetSchema = new Mongoose.Schema({
userID: { type: ObjectId, required: true, ref: 'User' },
status: { type: String, default: 'active' },
title: { type: String, default: '' },
description: { type: String, default: '' },
images: { type: Object, default: [] },
videos: { type: Object, default: [] },
comments: [ Message ],
},
{
timestamps: true
})
当用户创建资产时,它将是仅包含objectId的草稿和其他具有默认值的字段。然后,用户将根据需要调用编辑服务,然后最终调用单独的服务来“发布”资产。
这是发布服务的相关代码:
asset.update({ status: 'active', createdAt: Date.now() }).exec()
这与mongodb 2.6一起使用,但是,在将数据库迁移到mongodb 3.6后,它会抛出以下错误:
{
name: 'MongoError',
message: 'Updating the path \'createdAt\' would create a conflict at \'createdAt\'',
driver: true,
index: 0,
code: 40,
errmsg: 'Updating the path \'createdAt\' would create a conflict at \'createdAt\''
}
我正在更新createdAt字段的原因是因为对于所有用例,资产的创建日期应该是用户发布它的日期,而不是用户创建草稿的日期
答案 0 :(得分:0)
我建议在资产架构中定义自己的属性createdAt。
否则,您可以使用mongoose的mongoose-timestamp插件自动在文档中添加createdAt属性,然后在文档保存或更新时自动更新。
可在此处找到更多信息: https://www.npmjs.com/package/mongoose-timestamp