大家好,不知为什么mongoose不能更新嵌入的数组中的数据。 ''' var MySchema=new Schema({ id:ObjectId, msgbody:String, replymsg:[ReplyPerson] });
var ReplyPerson=new Schema({ rid:ObjectId, parentid:ObjectId, rmsg:String, rimgurls:[String], });
传调参数示例: params:{schemaid:1,childid:2};
就是MySchema中的replymsg数组中找rid为2的记录,并把其中的rmsg改为'cccccccc'
exports.myupdate = function (params, data, callback) { MySchema.findOne({_id:params.schemaid}, function (err, mySchema) { if (err) { console.log('Err:' + err); return callback(err); } if (!mySchema) { return callback(new Error('无可更新内容!')); } //如果直接这样赋值是可以改变的。 mySchema.replymsg=['aaaa','bbbb']; for(var key in mySchema.replymsg){ // console.log('key:'+key); var obj=mySchema.replymsg[key]; // console.log('obj:'+obj); if(obj.parentid==params.schemaid && obj.rid=params.childid){ //通过调试,这是是会执行到的,但最终mongodb 中值还是原来的值。 mySchema.replymsg[key].rmsg='cccccccccccccc'; break; } } mySchema.save(callback); }); }; ''' 但当我执行这段代码后,mongodb中记录一直没改变。 可如果我不是通过改变数组中的记录内容,直接把整个数组赋值mySchema.replymsg=['aaaa','bbbb'];是会改变值的。 难道mongoose不能自动检测到数组中的值已经变化过,如果是这样,那么有没有什么值可以手动设置让mongoose知道这些值变化了呢? 非常感谢! 调了一个上午,始终不行,求救!!!