[英]Unable to update mongoose model
我有一個奇怪的問題困擾着我。 我有一個模型:
var Model = new Schema({
name: String,
variations: Array
});
變體條目如下所示:
[ {code: '', price: '' }, {code: '', price: '' }]
我需要添加一個新字段-說“顏色”。 所以我這樣做批量更新:
Model.find().exec(function(err, products) {
if (!err) {
products.forEach(function(p) {
for(var i = p.variations.length - 1; i >= 0; i--) {
p.variations[i]['color'] = 'red';
// This shows all existing variations
// with the new color feed - correct
console.log(p.variations[i]);
}
p.save(function(err) {
if (!err) {
console.log("Success");
} else {
console.log(err);
}
});
});
}
});
但是沒有設置“顏色”字段-如果我再次檢查並注釋掉p.variations[i]['color'] = 'red';
行,然后它不顯示。 我似乎無法弄清楚為什么要這樣做。 我有一個onSave事件,該事件已正確觸發,因此可以保存。 我也沒有對版本結構進行任何檢查-即沒有代碼只允許代碼和價格。 我顯然缺少了一些東西,但幾個小時后我就沒了主意。
當您修改非類型化的內容Array
像場variations
,你需要通知你已經通過調用改變了它的價值貓鼬markModified(path)
在修改的文檔或隨后的save()
調用不會保存。 參見docs 。
for(var i = p.variations.length - 1; i >=0; i--) {
p.variations[i]['color'] = 'red';
}
p.markModified('variations');
p.save(function(err) { ...
您必須使用set函數來更改屬性。 其背后的原因是貓鼬必須將字段標記為已修改才能保存到數據庫。
for(var i = p.variations.length - 1; i >=0; i--) {
p.variations[i].set({"color":"red", "code":"herr"});
// or
p.variations[i].set("color":"red");
p.variations[i].set("code":"herr");
}
另一種選擇是不改變設置器的p.markModified('variations');
更改字段的值,然后手動將其標記為已修改: p.markModified('variations');
我認為您應該始終使用二傳手,因為它更易讀。 您只需傳遞一個包含所有參數更改的json對象,它就會安全地更新您真正想要更改的字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.