使用数组对象增加数组元素名称数量的值

我有一个多个对象的数组,我希望按照_id顺序减lessqty的值。 这是我的努力:

 funcs.updateOrder=function(request, reply){ Order.update({ "order._id" : request.payload.orderid }, { "$set" : { "$inc":{"order.$.qty" : {qty:request.payload.qty}}, "order.$.reason" : request.payload.reason, } }, function(err) { if(err){ reply(err).code(500); } else{ reply({"message":"success"}); } }); }; 

这是我的mongodb模式:

 { "_id": "57206feb05a533ac0f84447e", "createdAt": "2016-04-27T07:53:15.108Z", "updatedAt": "2016-04-27T07:53:15.108Z", "orderno": "ORDER-NO-04-2016-2", "order": [ { "qty": -1, "model": "56dd2a2adcb3dde8067906dc", "vendorname": "57079f50182dd95c16c2d790", "partname": "57206ddd566d86580ec2d480", "make": "56dd2a29dcb3dde80679062e", "_id": "57206feb05a533ac0f844482", "reason": "unable to delivered" }, { "qty": 12, "model": "56dd2a2adcb3dde8067906dc", "vendorname": "57079f50182dd95c16c2d790", "partname": "57206ddd566d86580ec2d480", "make": "56dd2a29dcb3dde80679062e", "_id": "57206feb05a533ac0f844481", "reason": "unable to delivered" }, { "qty": 66, "model": "56dd2a2adcb3dde8067906f1", "vendorname": "5710be56dc475f640e83a0ba", "partname": "57206ddd566d86580ec2d480", "make": "56dd2a29dcb3dde80679062e", "_id": "57206feb05a533ac0f844480", "reason": null }, { "qty": 55, "model": "56dd2a2adcb3dde806790704", "vendorname": "57079f50182dd95c16c2d790", "partname": "57206ddd566d86580ec2d480", "make": "56dd2a29dcb3dde80679062e", "_id": "57206feb05a533ac0f84447f", "reason": null } ], "__v": 0 } 

$inc操作符是一个独立的字段更新操作符 ,并不像使用$set那样用作embedded式操作符。 你需要分开两个:

 funcs.updateOrder = function(request, reply){ Order.update( { "order._id" : request.payload.orderid }, { "$set": { "order.$.reason": request.payload.reason }, "$inc": { "order.$.qty": request.payload.qty } }, function(err) { if (err){ reply(err).code(500); }else{ reply({"message": "success"}); } }); });