package main import ( "context" "github.com/gogf/gf/v2/frame/g" "github.com/qiniu/qmgo" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "log" ) var ( MongoDatabaseList map[string]*qmgo.Database ) func main() { ctx := context.Background() initMongo(ctx) for k, _ := range MongoDatabaseList { findUnit(ctx, k) } } func initMongo(ctx context.Context) { mongoCfg, err := g.Cfg().Get(ctx, "game.mongo") if err != nil { return } config := mongoCfg.Maps() MongoDatabaseList = map[string]*qmgo.Database{} for _, v := range config { mongoclient, err := qmgo.NewClient(ctx, &qmgo.Config{Uri: v["link"].(string)}) if err != nil { log.Println("数据库: ", v["id"], ", 创建错误:", err.Error()) continue } db := mongoclient.Database(v["name"].(string)) MongoDatabaseList[v["id"].(string)] = db } } func findUnit(ctx context.Context, serverId string) { query := bson.M{"$and": bson.A{bson.M{"Children.ConfigId": 845}, bson.M{"Children.Amount": bson.M{"$gt": 1000000}}}} selectStores(ctx, serverId, query) } func selectStores(ctx context.Context, serverId string, query bson.M) { stores := []map[string]interface{}{} MongoDatabaseList[serverId].Collection("StoreComponent").Find(ctx, query).All(&stores) if len(stores) == 0 { log.Printf("服务器编号[%s] 不存在数量!", serverId) return } log.Printf("服务器编号[%s] 搜素长度: %d", serverId, len(stores)) for _, v := range stores { store := v["Children"].(primitive.A) for _, v1 := range store { item := v1.(map[string]interface{}) if item["ConfigId"].(int32) == 845 && item["Amount"].(int32) > 1000000 { log.Printf("服务器编号: %s, id: %d, 物品: %d, 数量: %d", serverId, v["_id"], item["ConfigId"], item["Amount"]) break } } } log.Printf("服务器编号[%s] 结束!", serverId) }