我有一个让我感到困惑的奇怪问题。我有一个模型:
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事件,该事件已正确触发,因此可以保存。我也没有对版本结构进行任何检查- 即没有代码只允许代码和价格。我显然缺少了一些东西,但几个小时后我就没了主意。
p.variations[i]['color'] = 'red';
当您修改无类型Array字段(如)的内容时variations,您需要通过调用markModified(path)已修改的文档来通知Mongoose您已更改其值,否则后续save()调用将无法保存它。参见docs。
Array
variations
markModified(path)
save()
for(var i = p.variations.length - 1; i >=0; i--) { p.variations[i]['color'] = 'red'; } p.markModified('variations'); p.save(function(err) { ...