我正在嘗試使用pre('findOneAndUpdate')
來更新Meeting
文檔的icon
屬性。此更新基於yearlymeeting
屬性的預先存在的值(請參閱下文)。Mongoose('findOneAndUpdate')中間件:需要訪問原始文檔
因爲pre
和post
save()
掛鉤不update()
執行,我似乎無法在所有訪問原始文檔。然而,這對我嘗試執行的操作至關重要。有沒有辦法解決?
例如,我能夠完成我的目的就pre('save')
,就像這樣:
meetingSchema.pre('save', function(next) {
const yearlymeetingSlug = this.yearlymeeting[0].toLowerCase().replace(/[^A-z0-9]/g, '');
this.icon = `${yearlymeetingSlug}.png`
next();
});
我想做什麼就能做的是這樣的:
meetingSchema.pre('findOneAndUpdate', function(next) {
const yearlymeetingSlug = originalDocument.yearlymeeting[0].toLowerCase().replace(/[^A-z0-9]/g, '');
this.icon = `${yearlymeetingSlug}.png`
next();
});
我明白(findOneAndUpdate
)中的this
引用查詢,而不是存儲的文檔本身。有什麼方法可以訪問文檔,以便我可以根據存儲的yearlymeeting
的值更新icon
?
如果你明白了,那麼你就會明白,「文檔」在修改時位於「服務器」上,因此「客戶端」上的任何庫函數都不可能對其中的文檔進行更改。 '.findOneAndUpdate()'只知道你在指令中實際發送的「當前數據」。如果您的客戶端上已經有了字段內容,那麼您在將選項填入'$ set'或類似內容之前進行修改。如果你沒有這些數據,那麼你需要從服務器上取回它。 MongoDB無法引用現有值 –