Manish chauhan
Manish chauhan

Reputation: 65

Increment value of an array element name quantity with array object

I have an array of multiple objects where I want to decrement the value of qty in my order with _id. This is my effort:

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"});
        }

    });


};

this is my mongodb schema:-

{
  "_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
}

Upvotes: 2

Views: 192

Answers (1)

chridam
chridam

Reputation: 103475

The $inc operator is an independent field update operator and is not used as an embedded operator with $set like what you have done. You need to separate the two:

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"});
            }
    });
});

Upvotes: 1

Related Questions