I'm trying to update item in subarray of document. Type of subarray is array of strings:
Dictionary.findOne({ name: req.query.name }, function(err1, data){
if(err1){
logger.error(err1);
res.send({ err: 'Db error' });
} else {
var index = data.values.indexOf(req.query.value);
if(index == -1)
res.send({ err: 'Value not found' });
else {
data.values[index] = req.query.newValue;
data.save(function(err2){
if(err2){
logger.error(err);
res.send({ err: 'Db error' });
} else
res.send({ data: data, info: 'Dictionary updated successfully' });
});
}
}
});
returned data is updated correctly, but record is not updated in database. Help please
You need to mark the change before saving it
data.markModified 'values'
data.save (...)
http://mongoosejs.com/docs/api.html#types_embedded_EmbeddedDocument-markModified
from mongodb shell you can write
db.test.update({values:"English"},{$set:{'values.1':"updated value"}})