mongodb 存储过程 遍历表数据_一个mongodb存储过程

functionProhibitNumbers(datetype,startdate,enddate,org,pageindex,pagesize) {//违规检查-数量控制 ProhibitNumbers('','','','',1,5)

//查询违规收费对应的DictID

var DictID=db.Dict.find({$and:[{DictName:"违规检查"},{value:"数量控制"}]},{ID:1,_id:0}).toArray()[0].ID;//根据字典ID查询对应的RuleID

var RuleIDs=db.CheckRules.aggregate(

{"$match" : {"DictID":DictID,"RuleValueLow":{"$in":["每日","全期","首日"]}} },

{"$group":{ "_id" :"$DictID","RuleIDs":{"$push":"$ID"}

}

}

).result[0].RuleIDs;//根据规则ID查询对应的Pcode

var Codes=db.CheckItems.aggregate(

{"$match" : {"DictID":DictID,"CheckRuleID":{"$in":RuleIDs}} },

{"$group":{ "_id" :{"DictID":"$DictID","RuleID":"$CheckRuleID","Code":"$StdCode"}

}

}

).result;//创建一个数组,用来存放违反规则的数据(该数据只包含id、pcode)

var myResult={};

myResult.result=newArray();//遍历Pcode,以对"全期","首日","每日"分别进行判断

var res=Codes.forEach(function(d){//根据规则id查找rule表中的RuleValueHigh、RuleValueLow

var m=db.CheckRules.find({"ID":d._id.RuleID},{"RuleValueHigh":1,"RuleValueLow":1,"_id":0}).toArray()[0];

d.Alimit=m.RuleValueLow;

d.AValue=parseFloat(m.RuleValueHigh);switch(d.Alimit)

{//查找每个患者每次住院首日出现的次数超过d.AValue的数据

case "首日":var n=db.Detail.aggregate(

{"$unwind" : "$Report"},

{"$match" : {"Report.PCode":d._id.Code} },

{"$group":{"_id":{"ID":"$_id","PCode":"$Report.PCode"},"sum_Amount":{"$first":"$Report.Amount"}

}

},

{"$match" : {"sum_Amount":{$gt:d.AValue}} }

);

d.Info=n.result;break;//查找每个患者每次住院的每个日期出现的总次数超过d.AValue的数据

case "每日":var n=db.Detail.aggregate(

{"$unwind" : "$Report"},

{"$match" : {"Report.PCode":d._id.Code} },

{"$group":{"_id":{"ID":"$_id","PCode":"$Report.PCode","PDate":"$Report.PDate"},"sum_Amount":{"$sum":"$Report.Amount"}

}

},

{"$match" : {"sum_Amount":{$gt:d.AValue}} }

);

d.Info=n.result;break;//查找每个患者每次住院的出现的总次数超过d.AValue的数据

case "全期":var n=db.Detail.aggregate(

{"$unwind" : "$Report"},

{"$match" : {"Report.PCode":d._id.Code} },

{"$group":{"_id":{"ID":"$_id","PCode":"$Report.PCode"},"sum_Amount":{"$sum":"$Report.Amount"}

}

},

{"$match" : {"sum_Amount":{$gt:d.AValue}} }

);

d.Info=n.result;break;

}//将违规的数据插入到一个全局数组里

if(d.Info.length!=0)

{

myResult.result.push({"CodeReport":d.Info[0]});

}

}

)//用来存放更详细的违规数据

var myResult2={};

myResult2.result=newArray();//对上面查找出来的违规数据(只包含id和pcode)进行遍历,根据其id和pcode匹配查找更详细的数据

myResult.result.forEach(function(d){var r=db.Detail.aggregate(

{"$unwind" : "$Report"},

{"$match" : {"_id":d.CodeReport._id.ID,"Report.PCode":d.CodeReport._id.PCode} },

{"$group":{"_id":{"ID":"$_id","Number":"$Info.Number","Name":"$Patient.Name","Sex":"$Patient.Sex","Birth":"$Patient.Birth","PDate":"$Report.PDate","PCode":"$Report.PCode","Price":"$Report.Price","Amount":"$Report.Amount","Total":"$Report.Total","OrgCode":"$Org.Code"}

}

}

).result;//遍历查找到的详细违规数据,分别将其插入到一个全局的数组myResult2里

r.forEach(function(b){

myResult2.result.push(b);

});

});

myResult2.count=myResult2.result.length;//创建一个数组,以存放符合分页条件的数据

var myResult3={};

myResult3.result=newArray();

myResult3.count=myResult2.count;var count=parseInt(myResult3.count);for(var i=(pageindex-1)*pagesize;i

{if(i==count) break;

myResult3.result.push(myResult2.result[i]);

}//补全最终要返回的结果集

myResult3.result.forEach(function(d){

d.RuleName='否决规则';var RuleID=db.CheckItems.find({"StdCode":d._id.PCode},{"CheckRuleID":1}).toArray()[0].CheckRuleID;var RuleTypeName=db.CheckRules.find({"ID":RuleID},{"RuleName":1}).toArray()[0].RuleName;

d.RuleType=RuleTypeName;

d.PName=db.ItemStd.find({"Code":d._id.PCode},{"CNName":1}).toArray()[0].CNName;

}

);returnmyResult3;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值