發生了一些奇怪的事情或我做了一些愚蠢的事情,但我遇到了以下問題。
我在這里有一個網路應用程式的輸入代碼,我有一個餐廳的在線選單。
產品結構如下。
設施->類別->專案->名稱
所以所有的物品模型都將它們所屬的類別的名稱保存為一個字串。
但有時您想更改類別的名稱。我想要做的是找到該類別中的所有專案并將指定類別的名稱更改為新類別。一切看起來都很好,直到我看到運行控制器更改了類別和專案的名稱以將新名稱完全保存到專案需要兩次。
類別更改了名稱,但專案在第二次運行時更新為新名稱。很奇怪吧?
那么,你能看到什么是我沒有實作的,我實作了錯誤修復歷史上最愚蠢的錯誤修復方式。
這是控制器 - 路線。
module.exports.updateCtg = async(req,res)=>{
const {id} = req.params;
for(i=0;i<2; i ){
category = await CategoryModel.findByIdAndUpdate(id,{...req.body.category});
await category.save();
items = await ItemModel.find({});
for(item of items){
if(item.facility === category.facility){
item.category = category.name;
await single.save();
}
}
}
res.render('dashboard/ctgview', {category._id});
}
uj5u.com熱心網友回復:
該findByIdAndUpdate函式回傳FOUND檔案,即任何更新前的檔案被應用。
這意味著在第一次運行時category設定為原始檔案。由于以下回圈使用category.name,它將每個專案的類別設定為未修改的名稱。
第二次迭代找到修改后的檔案,嵌套回圈使用 中的新值category.name。
要一次性完成此操作,請使用
item.category = req.category.name;
或者如果您不確定它將包含一個新名稱,請使用
item.category = req.category.name || category.name;
或者也許不是回圈,而是使用updateMany
if (req.category.name) {
ItemModel.updateMany(
{"item.facility": category.facility},
{"item.category": req.category.name}
)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/364406.html
