go語言mongdb管道使用

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

原始json:

{  "listsn": "",  "code": "fwq_add",  "detail": {    "appdate": "2016-06-28",    "expectdate": "2016-06-30",    "service_text": {      "text": "NAT管理(樂視雲端運算有限公司產品研發中心_基礎架構_網路服務_NAT管理)",      "id": "343"    },    "projectname_text": {      "id": "575789b9f0a2d7e179ac750b",      "text": "採購項目"    },    "note": "test",    "totalmoney": 132500,    "detail": [      {        "buss": "",        "alamLinks_text": [          {            "text": "張三1",            "id": "zhangsan1@qq.com"          }        ],        "opSystem_text": {          "id": "CentOS 6.6",          "text": "CentOS 6.6"        },        "buss_text": {          "id": "",          "text": ""        },        "template": "569f89b02ae6ff1d0043ed7b",        "use_type_text": {          "id": "1",          "text": "生產環境"        },        "fpData": [],        "follow_idc_text": {          "id": "1",          "text": "否"        },        "alamLinks": "zhangsan1@qq.com",        "num": 2,        "modular": "test",        "follow_idc": "1",        "netReq_text": {          "text": "美國機房",          "id": "569f9ae72ae6ff1d0043edc1"        },        "opSystem": "CentOS 6.6",        "netReq": "569f9ae72ae6ff1d0043edc1",        "use_type": "1",        "template_text": {          "id": "569f89b02ae6ff1d0043ed7b",          "text": "A1-1  [CPU:24C(E5-2620V3*2)          記憶體:128G(16G*8)          硬碟:600G(系統 raid1)          ||標配實體機(普通應用)||26500 ]"        }      },      {        "buss_text": {          "id": "",          "text": ""        },        "num": 3,        "use_type": "2",        "follow_idc_text": {          "id": "1",          "text": "否"        },        "netReq": "568a7d67b9687e31c81d8379",        "opSystem_text": {          "id": "CentOS 6.6",          "text": "CentOS 6.6"        },        "modular": "test2",        "use_type_text": {          "text": "測試環境",          "id": "2"        },        "template": "569f89c32ae6ff1d0043ed7c",        "alamLinks_text": [          {            "id": "zhangsan1@letv.com",            "text": "張三1"          }        ],        "follow_idc": "1",        "alamLinks": "zhangsan1@letv.com",        "opSystem": "CentOS 6.6",        "buss": "",        "template_text": {          "id": "569f89c32ae6ff1d0043ed7c",          "text": "A1-2  [CPU:24C(E5-2620V3*2)          記憶體:128G(16G*8)          硬碟:600G(系統 raid1),3T(資料 raid5)          ||標配實體機(普通應用)||26500 ]"        },        "netReq_text": {          "id": "568a7d67b9687e31c81d8379",          "text": "核心純內網"        },        "fpData": []      }    ],    "marate": "必要性說明test",    "projectname": "575789b9f0a2d7e179ac750b",    "service": "343",    "explain": "必要性說明test",    "purchase_type": "1",    "purchase_type_text": {      "id": "1",      "text": "重點項目"    }  },  "desc": "測試單據",  "reader": "",  "createtime": "2016-06-28 09:54:15",  "type": "",  "uuid": "cecaf698-a2d7-41fa-94b1-d157f38b3cfc",  "status": 593,  "updatetime": "2016-06-28 09:54:15",  "orderid": 7437,  "title": "測試單據",  "owner": "zhangsan1@qq.com",  "qq": "187287822",  "leader": "李四 - ",  "owner_name": "zhangsan1(zhangsan1@qq.com)",  "telphone": "13718899792"}

  

原始代碼:

/*重點項目實體機需求匯總 查詢資料 */func (this *IndexController) ProjectReqTotalData() {fmt.Println("ddddddd-------------------->hhhhhhhh--------------------------->")startTime := this.GetString("startTime")endTime := this.GetString("endTime")projectname := this.GetString("projectname")/*db.process_list_info.aggregate({"$match":{"status":551}},{"$unwind":"$detail.detail"},{"$group":{"_id":{"peizhi":"$detail.detail.template","projectname":"$detail.projectname_text.text","project":"$detail.projectname","service":"$detail.service","servicename":"$detail.service_text.text"},"tatalNum":{"$sum":"$detail.detail.num_int"}}},{"$project":{"peizhi_id":"$_id.peizhi","netReq":"$_id.netReq","num":"$tatalNum"}}) *//*國內部分 */matchConditionMap1 := map[string]interface{}{}matchConditionMap1["detail.purchase_type_text.id"] = "1"matchConditionMap1["code"] = "fwq_add"neMap1 := map[string]interface{}{}neMap1["status"] = int64(10)neMap2 := map[string]interface{}{}neMap2["status"] = int64(17)matchConditionMap1["$nor"] = [2]interface{}{neMap1,neMap2}//matchConditionMap1["status"] = int64(551)if  startTime != "" {q_map := map[string]interface{}{}q_map["$gte"] = startTimematchConditionMap1["createtime"] = q_map}if  endTime != "" {q_map2 := map[string]interface{}{}q_map2["$lte"] = endTimematchConditionMap1["createtime"] = q_map2}if  projectname != "" {matchConditionMap1["detail.projectname"] = projectname}matchMap := map[string]interface{}{}matchMap["$match"] = matchConditionMap1unwindMap := map[string]interface{}{}unwindMap["$unwind"] = "$detail.detail"//國內條件queryMap1 := map[string]interface{}{}queryMap2 := map[string]interface{}{}queryMap3 := map[string]interface{}{}queryMap4 := map[string]interface{}{}queryMap5 := map[string]interface{}{}queryMap1["detail.detail.netReq"] = "568a7d67b9687e31c81d8379"  //核心純內網queryMap2["detail.detail.netReq"] = "568a7dadb9687e31c81d8395"  //電信公網IPqueryMap3["detail.detail.netReq"] = "569f76952ae6ff1d0043ed6f"  //聯通公網IPqueryMap4["detail.detail.netReq"] = "569f82e62ae6ff1d0043ed72"  //多線公網IPqueryMap5["detail.detail.netReq"] = "56c2f8102ae6ff1d004c2a8f"  //外地機房queryArray := []interface{}{}queryArray = append(queryArray,queryMap1)queryArray = append(queryArray,queryMap2)queryArray = append(queryArray,queryMap3)queryArray = append(queryArray,queryMap4)queryArray = append(queryArray,queryMap5)qMap := map[string]interface{}{}qMap["$or"] = queryArraymatchMap2 := map[string]interface{}{}matchMap2["$match"] = qMapgroupMap := map[string]interface{}{}idMap := map[string]interface{}{}idMap["peizhi"] = "$detail.detail.template"idMap["peizhiname"] = "$detail.detail.template_text.text"idMap["projectname"] = "$detail.projectname_text.text"idMap["project"] = "$detail.projectname"//idMap["service"] = "$detail.service"//idMap["servicename"] = "$detail.service_text.text"sumMap := map[string]interface{}{}sumMap["$sum"] = "$detail.detail.num"groupMap["_id"] = idMapgroupMap["tatalNum"] = sumMapmapGroup := map[string]interface{}{}mapGroup["$group"] = groupMapsortMap := map[string]interface{}{}sort1:=map[string]interface{}{}//sort1["tatalNum"] = 1//sort1["_id"] = 1sort1["_id.projectname"] = 1//sort1["_id.service"] = 1sort1["_id.peizhi"] = 1sortMap["$sort"] = sort1groupArr := make([]interface{}, 0)groupArr = append(groupArr, matchMap)groupArr = append(groupArr, unwindMap)groupArr = append(groupArr, matchMap2)groupArr = append(groupArr, mapGroup)groupArr = append(groupArr, sortMap)//fmt.Println("列印參數>>國內——————————————>",groupArr)var baseMongo componets.BaseMongoresultIn := baseMongo.FindPipe("lingshu", "process_list_info", groupArr)//fmt.Println("列印結果>>國內------>")//fmt.Println(resultIn)/*國外部分 */matchConditionMap1_out := map[string]interface{}{}matchConditionMap1_out["detail.purchase_type_text.id"] = "1"matchConditionMap1_out["code"] = "fwq_add"//matchConditionMap1_out["status"] = int64(551)matchMap_out := map[string]interface{}{}matchMap_out["$match"] = matchConditionMap1_outunwindMap_out := map[string]interface{}{}unwindMap_out["$unwind"] = "$detail.detail"qMap_out := map[string]interface{}{}qMap_out["$nor"] = queryArray  // 國外條件//matchConditionMap2["$detail.detail.netReq"] = "not in"  //國內條件matchMap2_out := map[string]interface{}{}matchMap2_out["$match"] = qMap_outgroupMap_out := map[string]interface{}{}idMap_out := map[string]interface{}{}idMap_out["peizhi"] = "$detail.detail.template"idMap_out["peizhiname"] = "$detail.detail.template_text.text"idMap_out["projectname"] = "$detail.projectname_text.text"idMap_out["project"] = "$detail.projectname"//idMap_out["service"] = "$detail.service"//idMap_out["servicename"] = "$detail.service_text.text"sumMap_out := map[string]interface{}{}sumMap_out["$sum"] = "$detail.detail.num"groupMap_out["_id"] = idMap_outgroupMap_out["tatalNum_out"] = sumMap_outmapGroup_out := map[string]interface{}{}mapGroup_out["$group"] = groupMap_outsortMap_out := map[string]interface{}{}sort2:=map[string]interface{}{}//sort2["_id"] = 1sort2["_id.projectname"] = 1//sort2["_id.service"] = 1sort2["_id.detail.template"] = 1sortMap_out["$sort"] = sort2groupArr_out := make([]interface{}, 0)groupArr_out = append(groupArr_out, matchMap)groupArr_out = append(groupArr_out, unwindMap_out)groupArr_out = append(groupArr_out, matchMap2_out)groupArr_out = append(groupArr_out, mapGroup_out)groupArr_out = append(groupArr_out, sortMap_out)//fmt.Println("列印參數>>國外——————————————>",groupArr_out)var baseMongo_out componets.BaseMongoresultOut := baseMongo_out.FindPipe("lingshu", "process_list_info", groupArr_out)//fmt.Println("列印結果>>國外------>")//fmt.Println(resultOut)for _,v := range resultIn {inMap := v.(bson.M)v.(bson.M)["tatalNum_out"] = float64(0)groupid := inMap["_id"].(bson.M)for _, v_out := range resultOut {outMap := v_out.(bson.M)groupid_out := outMap["_id"].(bson.M)if groupid_out["peizhi"].(string) == groupid["peizhi"].(string) && groupid_out["projectname"].(string) == groupid["projectname"].(string) && groupid_out["project"].(string) == groupid["project"].(string){v.(bson.M)["tatalNum_out"] = outMap["tatalNum_out"]v_out.(bson.M)["is_merge"] = "1"}}}//fmt.Println("列印out處理後資料——————————>",resultOut)for _,m := range resultOut {if m.(bson.M)["is_merge"]==nil{m.(bson.M)["tatalNum"] = float64(0)resultIn = append(resultIn,m)}}utils_r := componets.Utils{}for _, item := range resultIn {template_id := item.(bson.M)["_id"].(bson.M)["peizhi"].(string)objectid := bson.ObjectIdHex(template_id)itemRes := baseMongo.FindById("lingshu", "cmdb_store_dict",objectid)fmt.Println("列印模版資訊————————>",itemRes)templateName := itemRes.(bson.M)["templateName"]cost := itemRes.(bson.M)["cost"]price := "0"if cost!=nil {price = cost.(string)if price=="" {price ="0"}}inNum := float64(0)outNum := float64(0)if(reflect.TypeOf(item.(bson.M)["tatalNum"]).Name()=="int"){inNum = float64(item.(bson.M)["tatalNum"].(int))}else {inNum = item.(bson.M)["tatalNum"].(float64)}if(reflect.TypeOf(item.(bson.M)["tatalNum_out"]).Name()=="int"){outNum = float64(item.(bson.M)["tatalNum_out"].(int))}else {outNum = item.(bson.M)["tatalNum_out"].(float64)}tempprice,_ := strconv.ParseFloat(price,64)price_float := utils_r.Round(tempprice,2)inTotalMoney := price_float * inNumoutTotalMoney := price_float * outNumitem.(bson.M)["inTotalMoney"] = utils_r.Round(inTotalMoney,2)item.(bson.M)["outTotalMoney"] = utils_r.Round(outTotalMoney,2)item.(bson.M)["_id"].(bson.M)["jixingName"] = templateNameitem.(bson.M)["cost"] = price_float}//fmt.Println("發送組合結果-——————————>",resultIn)this.Data["resultIn"] = resultInthis.Data["Baseurl"]=beego.AppConfig.String("baseurl")this.TplNames = "statistics/projectreqtotaldata.html"}

 

mongdb原始命令:

b.process_list_info.aggregate({"$match":{"status":551}},{"$unwind":"$detail.detail"},{"$group":{"_id":{"peizhi":"$detail.detail.template","projectname":"$detail.projectname_text.text","project":"$detail.projectname","service":"$detail.service","servicename":"$detail.service_text.text"},"tatalNum":{"$sum":"$detail.detail.num_int"}}},{"$project":{"peizhi_id":"$_id.peizhi","netReq":"$_id.netReq","num":"$tatalNum"}})db.process_list_info.aggregate({"$unwind":"$detail.detail”})db.process_list_info.aggregate({"$match":{"detail.projectname_text.id":"575789b9f0a2d7e179ac750b"}},{"$unwind":"$detail.detail”})db.process_list_info.aggregate({"$match":{"detail.projectname_text.id":"575789b9f0a2d7e179ac750b"}},{"$unwind":"$detail.detail"},{"$project":{"tttt":"$createtime"}})db.process_list_info.aggregate({"$match":{"detail.projectname_text.id":"575789b9f0a2d7e179ac750b","orderid":8285}},{"$unwind":"$detail.detail"},{"$group":{"_id":"$detail.detail.template","tatalNum":{"$sum":"$detail.detail.num"}}},{"$project":{"peizhi_id":"$_id","num":"$tatalNum"}})db.process_list_info.aggregate({"$match":{"status":551}},{"$unwind":"$detail.detail"},{"$group":{"_id":{"peizhi":"$detail.detail.template","netReq":"$detail.detail.netReq"},"tatalNum":{"$sum":"$detail.detail.num_int"}}},{"$project":{"peizhi_id":"$_id.peizhi","netReq":"$_id.netReq","num":"$tatalNum"}}) db.process_list_info.aggregate({"$match":{"status":551}},{"$unwind":"$detail.detail"},{"$group":{"_id":{"peizhi":"$detail.detail.template","projectname":"$detail.projectname_text.text","project":"$detail.projectname","service":"$detail.service","servicename":"$detail.service_text.text"},"tatalNum":{"$sum":"$detail.detail.num_int"}}},{"$project":{"peizhi_id":"$_id.peizhi","netReq":"$_id.netReq","num":"$tatalNum"}})




 

 

  

注意:不管是mongdb原始命令,還是go調用,$sum操作符號,只能匯總數實值型別的欄位(比如,Double,float等);之前儲存的時候num欄位儲存為string類型(“5”),無法匯總;db.process_list_info.find({"code":"fwq_add"}).forEach(function(obj){obj.detail.detail.forEach(function(bj){ bj.num = parseFloat(bj.num) } );db.process_list_info.save(obj)  })db.process_list_info.find({"code":"fwq_mv_add"}).forEach(function(obj){obj.detail.detail.forEach(function(bj){ bj.num = parseFloat(bj.num) } );db.process_list_info.save(obj)  })這樣處理以後num欄位轉換成了Double; db.foo.find({bad: {$exists: true}}).forEach(function(obj) { obj.user_id = new NumberInt(obj.user_id);db.foo.save(obj);});

  

go的管道調用

func (this *BaseMongo) FindPipe(dataBase string, col string, queryStruct []interface{}) []interface{} {if session.Ping() != nil {doConn()}c := session.DB(dataBase).C(col)var result []interface{}c.Pipe(&queryStruct).All(&result)return result}

  

  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.