Arrays mongoose推式嵌套子文档数组
我需要在嵌套的子文档数组中推送数据: 这是我的Json:Arrays mongoose推式嵌套子文档数组,arrays,node.js,mongodb,mongoose,Arrays,Node.js,Mongodb,Mongoose,我需要在嵌套的子文档数组中推送数据: 这是我的Json: [ { _id: "56cbe9727bab33a413216dd4", company_name: "Star", __v: 0, created_at: "2016-02-23T05:09:06.754Z", plan: [ { plan_name: "Mediclassic", plan_type: "Individu
[
{
_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
}
}
]
}
]
}
]
我需要将我的数据推入速率卡,我尝试了一些方法,但不起作用
下面是我的代码:
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
$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();
});
};
//新费率卡
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);
});
}))
这里我需要将数据推送到rate_卡,但数据并没有存储在子文档数组中,这里我得到了计划id并尝试推送,但不起作用
在服务器响应中,我得到了这个
{ok:0,n:0,nModified:0}
试试这个,我希望它能帮助你
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);
});
});
如果插入的值不存在,那么最好使用$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
});
}
});
我使用以下更新查询完成了此操作:
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') }]
}
);
在$each
中,您需要添加对象数组。
元素。_id
是您的子文档id(上面的案例是计划_id
)。您需要先选择要更新的公司吗?好像你在不知道你在使用哪一个文档之前就试图更新计划。嘿,我也遇到过类似的问题,但尝试上面的事情却无法解决。我在这个stackoverflow上发布了问题,如果可以,请帮助我。