Mam dziwny problem, który mnie niepokoi. Mam model:Nie można zaktualizować modelu mangusty
var Model = new Schema({
name: String,
variations: Array
});
Wpis odmiany wygląda tak:
[ {code: '', price: '' }, {code: '', price: '' }]
muszę dodawać nowe pole - mówią "kolor". Więc robię to do aktualizacji serii:
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);
}
});
});
}
});
Jednak „kolor” pole nie jest ustawiony - gdybym przejść ponownie i skomentuj linię p.variations[i]['color'] = 'red';
to nie wskazuje. Nie mogę się domyślić, dlaczego to robi. Mam zdarzenie onSave, które jest uruchamiane poprawnie, więc jest zapisywane. Nie mam też żadnej kontroli struktury zmian - tzn. Nie ma kodu, który pozwala tylko na kod i cenę. Najwyraźniej czegoś brakuje, ale po kilku godzinach zabrakło mi pomysłów.
Dotyczy to również użycia głębokich obiektów z luźnym typem schematu (mangusta.Schema.Types.Mixed). A od Mongoose 4.5.8 powyższa metoda (markModified) nadal jest metodą działającą w tym kierunku. – SylonZero