3

i need to push data in nested subdocument array:

this is my Json:

[
  {
    _id: "56cbe9727bab33a413216dd4",
    company_name: "Star",
    __v: 0,
    created_at: "2016-02-23T05:09:06.754Z",
    plan: [
            {
            plan_name: "Mediclassic",
            plan_type: "Individual",
            _id: "56cbe9727bab33a413216dd5",
            created_at: "2016-02-23T05:09:06.756Z",
            rate_card: [
                          {
                            zone: "zone-2",
                            suminsured: 150000,
                            premium: 2874,
                            size: "1A",
                            _id: "56cbe9727bab33a413216dd6",
                            benefits: {
                            hospitals: true,
                            copay: true,
                            cashless_hospital: true,
                            existing_disease_cover: true
                            },
                            age: {
                            min: "5M",
                            max: 35
                            }
                          }
                        ]
            }
          ]
  }
]

I need to push my data in rate_card, i have tried something but its not working

below is my code:

AngularController.js

$scope.RateCardCreateAction = function(){
    $scope.params = $routeParams.id;
    console.log($scope.insurance.plan.rate_card);
    $http.put('/auth/insurance-list/plan/new/rate_card/' + $scope.params, $scope.insurance.plan.rate_card).success(function(response){
        console.log(response);
        refresh();
    });
};

mainRoutes.js

// New Rate Card

router.put('/secure/insurance-list/plan/new/rate_card/:id', function(req, res){
var id = req.params.id;
Insurance.update({'plan._id':id}, {$push : 
    { 
        'rate_card' : {
            'zone' : req.body.zone,
            'suminsured' : req.body.suminsured,
            'premium' : req.body.premium,
            'size' : req.body.size, 
            'age' : {
                        'min' : req.body.age.min, 
                        'max' : req.body.age.max
                    },
            'benefits' : {
                            'hospitals' : req.body.benefits.hospitals,
                            'cashless_hospital' : req.body.benefits.cashless_hospital,
                            'copay' : req.body.benefits.copay,
                            'existing_disease_cover' : req.body.benefits.existing_disease_cover
                        }

            }   
    }
}, {upsert: true}, function(err, docs){
res.json(docs);
console.log(docs);
});

});

Here i need to push data to rate_card, but data is not storing in subdocument array, here am getting plan id and trying to push but is not working

in server response am getting this { ok: 0, n: 0, nModified: 0 }

1
  • Do you need to select which company your are updating first? It seems like you're trying to update the plan before knowing which document you're on. Commented Feb 23, 2016 at 13:11

3 Answers 3

6

Try this, i hope this will help you

router.put('/secure/insurance-list/plan/new/rate_card/:id/:id2', function(req, res){
        var id = req.params.id;
        var id2 = req.params.id2;
        Insurance.update({_id:id, 'plan._id':id2}, {$push : 
            {'plan.$.rate_card' : req.body}
        }, {upsert: true}, function(err, docs){
        res.json(docs);
        console.log(docs);
        });
    });
Sign up to request clarification or add additional context in comments.

1 Comment

Heyy I have encountered the similar problem but unable to solve it trying the above thing. I posted by problem on this stackoverflow please help me if you can. https://stackoverflow.com/questions/66027692/need-to-push-data-in-nested-subdocument-array
0

If somehow your inserted value is not present then it would be great to use $addToSet.

var updateArr = {
  'roomUsers':{
     userId:req.session.userInfo._id,
     requestDate:Date.now(),
     status:1
  }
};

roomInfo.findOneAndUpdate({_id:roomId}, {$addToSet:updateArr}, (err, result) => {

if (!err && result) {
  res.send({
     status:true
  });
}
 else{
    res.send({
      status:false
    });
 }
});

Comments

0

I got it done using below update query:

db.insurance.updateOne(
{
    _id: ObjectId('60659595afcb710627e3fad7')
},
{
    $push: {
        "plan.$[element].rate_card": {
            $each: [
                { _id: ObjectId('6062bd90c5a1d66fdd2c91bc'), premium: 2874, size: "1A" },
                { _id: ObjectId('6062bd90c5a1d66fdd2c91bc'), premium: 2874, size: "1A" }]
        }
    }
},
{
    arrayFilters: [{ "element._id": ObjectId('6065a35ee1e5f1153504e861') }]
}
);

In $each you need to add your array of object. element._id is your subdocument id (above case is plan _id).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.