package main import ( "mongodb" "qfw/util" "sync" ) var ( Mgo, Mgo1 *mongodb.MongodbSim ) func init() { //Mgo = &mongodb.MongodbSim{ // MongodbAddr: "192.168.3.207:29092", // Size: 10, // DbName: "wjh", //} //Mgo.InitPool() Mgo1 = &mongodb.MongodbSim{ MongodbAddr: "172.17.4.187:27082,172.17.145.163:27083", // 172.17.4.187:27082,172.17.145.163:27083 Size: 15, DbName: "mixdata", UserName: "SJZY_RWESBid_Other", Password: "SJZY@O17t8herB3B", } Mgo1.InitPool() } func main() { sess := Mgo1.GetMgoConn() defer Mgo1.DestoryMongoConn(sess) ch := make(chan bool, 3) wg := &sync.WaitGroup{} field := map[string]interface{}{"bid_contracttype": -1, "bid_unittype": -1, "bid_projectname": -1, "bid_purchasing": -1, "bid_area": -1} query := sess.DB("mixdata").C("qyxy_tmp").Find(nil).Select(field).Iter() count, taskcount := 0, 0 for tmp := make(map[string]interface{}); query.Next(&tmp); count++ { if count%50 == 0 { util.Debug("current ---", count, taskcount) } ch <- true wg.Add(1) go func(tmp map[string]interface{}) { defer func() { <-ch wg.Done() }() name := util.ObjToString(tmp["company_name"]) info, _ := Mgo1.FindOne("qyxy_std", map[string]interface{}{"company_name": name}) if len(*info) > 0 { Mgo1.Save("qyxy_oprd", *info) Mgo1.UpdateById("qyxy_tmp", tmp["_id"], map[string]interface{}{"$set": map[string]interface{}{"exist": true}}) } }(tmp) tmp = make(map[string]interface{}) } wg.Wait() util.Debug("over ---", count, taskcount) c := make(chan bool, 1) <-c }