Mongoose save()不更新数据库文件中数组的值

我正尝试使用GUI更新集合(单位)中的文档,并且在更新之后,我想更新集合(用户)中的值(user.Units,它是单元名称的数组)。 如果数组长度只是1个元素,它会得到更新,并且也显示在数据库中,一切正常,但是当Array of Units有多个元素时,我尝试通过for循环更新它,它显示它被更新,但是当我检查数据库,它仍然没有更新。

我真的不知道为什么我更新数据库时,通过循环更新值。

整个编辑和更新function: –

edit_unit: function (req, res, next) { var Data = req.body; Client_data.Unit.findById(req.params.unitId, function (err, unit) { var error = false; if (err) { error = err; } else if (!unit) { error = "FATAL: unable to look up Unit #" + req.params.unitId; } else { switch(req.body.name) { case 'Icon': var Icon = unit.Icon; User.find({"Units":Icon}, function (err, users) { if (err) console.log(err); users.forEach(function (u) { if (u.Units.length > 1) { for (var i = 0; i <= u.Units.length; i++) { if(u.Units[i] == Icon) { u.Units[i] = req.body.value; } } } else { u.Units = req.body.value; } u.save(u); }); }); unit[req.body.name] = req.body.value; break; case 'Description': unit[req.body.name] = req.body.value; break; default: unit[req.body.name] = req.body.value; break; } var data = JSON.stringify(req.body); unit.save(); res.writeHead(200, { 'Content-Length': data.length, 'Content-Type': 'application/json' }); res.end(data); } }); } 

req.body: –

 { name: 'Icon', value: 'Health Utility 22c', pk: '5395ed107cd92dc40eaafb56' } 

用户架构: –

 var userSchema = mongoose.Schema({ UserName: { type: String, required: true }, Password: { type: String }, FirstName: { type: String, required: true }, LastName: { type: String, required: true }, CompanyName: { type: String }, PhoneNumber: { type: Number }, StartDate: { type: Date, required: true }, EndDate: { type: Date, required: true, default: new Date('9999-12-12') }, ClientID: { type: ObjectId, ref: 'Client', default: null }, DepartmentID: { type: ObjectId, ref: 'Department' }, ManagerID: { type: ObjectId, ref: 'User', default: null}, Units: [ { type: String, required: true } ], UserList: { type: Array, default:[]}, Access: [{ type: String, enum: ['DEMO', 'USER','MANAGER','ADMINISTRATOR','OWNER']}], Credentials: { type: String }, AFTE: { type: Number}, SessionID: { type: String, default: null } }, { safe: true }); 

也许通知mongooose这样的数据集已经改变了:

 doc.markModified('pathToYourAttribute') 

从文档http://mongoosejs.com/docs/schematypes.html

 person.anything = { x: [3, 4, { y: "changed" }] }; person.markModified('anything'); 

希望这是帮助!

参考这个问题 。 解决这个问题的一种方法是不通过传统的数组索引方法来更新数组。 所以这样做

 doc.array.set(index, value); 

代替

 doc.array[index] = value; 

也可以查看常见问题和文档了解更多详情。