如何用 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 },
有關問題的清晰描述,請參見影像。
在此處輸入圖片說明
uj5u.com熱心網友回復:
如果您希望在 officialLyric 中的editedLyric 陣列中始終擁有最新 updateLyric 的值,則您實際上不需要將 officialLyric 存盤在 DB 中。您可以使用貓鼬虛擬欄位并從架構中洗掉 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();
});
uj5u.com熱心網友回復:
您可以嘗試從 MongoDB 4.2 開始使用聚合管道進行更新,
$arrayElemAtupdatedLyric從editedLyrics陣列中獲取第一個值并將其更新為officialLyric
db.collection.updateMany(
{}, // put your query
[{
$set: {
officialLyric: {
$arrayElemAt: ["$editedLyrics.updatedLyric", 0]
}
}
}]
)
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335693.html
上一篇:如何根據陣列成員對集合進行排序
