node.js - 如何在mongodb中用另一个覆盖模式的一个字段
问题描述
如何用 updateLyric 的值覆盖 officialLyric 的值?
artist: { type: String, required: true },
title: { type: String, required: true },
officialLyric: { type: String, required: true },
editedLyrics: [
{
updatedLyric: String,
status: {
type: String,
enum: ["Aproved", "Rejected", "Pending"],
default: "Pending",
},
userId: { type: Schema.Types.ObjectId, required: true, ref: "User" },
},
],
releaseDate: { type: Date },
有关问题的清晰描述,请参见图像。
解决方案
如果您希望始终必须在 officialLyric 中的editedLyric 数组中获取最新 updateLyric 的值,则不需要将 officialLyric 实际存储在 DB 中。您可以使用 mongoose 虚拟字段并从架构中删除 officialLyric。
LyricSchema.virtual('officialLyric').get(function () {
if(!this.editedLyrics.length) return null;
return this.editedLyrics[this.editedLyrics.length-1].updatedLyric;
});
如果您仍然想先存储官方歌词,然后用您保存的编辑版本覆盖它。您可以使用挂钩。
LyricSchema.post('save', async(error, doc, next) => {
if(doc.editedLyrics.length && doc.officialLyric != doc.editedLyrics[doc.editedLyrics.length-1].updatedLyric){
doc.officialLyric = doc.editedLyrics[doc.editedLyrics.length-1].updatedLyric;
await doc.save();
}
next();
});
推荐阅读
- php - 为什么我的 git clone 只显示一个空白页?
- http - 使用 golang 终止来自 IP 层的 http 请求
- google-analytics - 将 Google Analytics(分析)自定义维度用于网页浏览统计小部件
- mysql - 带有外部 MySQL 数据库的 Sonarqube 7.1 失败并出现“必须升级数据库”错误
- vuejs2 - VueJs + Element UI:如何使用照片 el-select 设置默认值?
- typescript - Import Enum to Interface breakes Interface
- swift - Generating Float32 Array (Float32 PCM data) using CMSampleBuffer
- dart - 保存图像文件然后上传有时不起作用
- python - 方向导数误差(用于模型交换的 FMU)
- python - 在烧瓶应用程序部署到 apache2 中使用 tensorflow 时出错