package main import ( "app.yhyue.com/moapp/jybase/mongodb" "fmt" "go.mongodb.org/mongo-driver/bson" "log" ) var ( MongoTool *mongodb.MongodbSim ) func init() { MongoTool = &mongodb.MongodbSim{ MongodbAddr: "172.17.4.86:27080", //172.17.4.85:27080 Size: 10, DbName: "jyqyfw", } MongoTool.InitPool() } func main() { sess := MongoTool.GetMgoConn() defer MongoTool.DestoryMongoConn(sess) //ch := make(chan bool, 2) //wg := &sync.WaitGroup{} idsMap := make(map[string]string) //q := bson.M{"_id": bson.M{"$gte": mongodb.StringTOBsonId("6693f6000000000000000000")}} f := bson.M{"id": 1, "ruleid": 1, "appid": 1, "rulename": 1} query := sess.DB("jyqyfw").C("usermail").Find(nil).Select(f).Sort("id").Iter() count := 0 for tmp := make(map[string]interface{}); query.Next(&tmp); count++ { if count%20000 == 0 { log.Println("current ---", count, len(idsMap)) } //ch <- true //wg.Add(1) func(tmp map[string]interface{}) { //defer func() { //<-ch //wg.Done() //}() appid := tmp["appid"].(string) id := tmp["id"].(string) if appid == "jyGQ1XQQsEAwNeSENOFR9D" { return } if tmp["ruleid"] != nil { ruleid := tmp["ruleid"].(string) //rulename := tmp["rulename"].(string) key := fmt.Sprintf("%s-%s-%s", appid, ruleid, id) if bid := idsMap[key]; bid != "" { MongoTool.UpdateById("usermail", bid, bson.M{"$set": bson.M{"del": true}}) } idsMap[key] = mongodb.BsonIdToSId(tmp["_id"]) } else if tmp["rulename"] != nil { rulename := tmp["rulename"].(string) key := fmt.Sprintf("%s-%s-%s", appid, rulename, id) if bid := idsMap[key]; bid != "" { MongoTool.UpdateById("usermail", bid, bson.M{"$set": bson.M{"del": true}}) } idsMap[key] = mongodb.BsonIdToSId(tmp["_id"]) } else { key := fmt.Sprintf("%s-%s", appid, id) if bid := idsMap[key]; bid != "" { MongoTool.UpdateById("usermail", bid, bson.M{"$set": bson.M{"del": true}}) } idsMap[key] = mongodb.BsonIdToSId(tmp["_id"]) } }(tmp) tmp = make(map[string]interface{}) } //wg.Wait() log.Println("over ---", count) }