package db import ( "context" capp "f1-game/internal/cherry_app" nameDB "f1-game/internal/name/db" "fmt" clog "github.com/cherry-game/cherry/logger" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" ) // ver00007 修正联盟申请列表为nil的问题 type ver00007 struct { } // Version 手动自增,必需唯一 func (ver00007) Version() int32 { return 7 } func (ver00007) Enable() bool { return false } func (p ver00007) Execute() bool { clog.Infof("Execute %v, nodeID = %s", p.Version(), capp.NodeID()) ctx := context.Background() mapLeagueCollection := dbComponent.DB().Collection(nameDB.Table_MapLeague) filter := bson.M{ "NodeID": capp.NodeID(), } // 查找需要修复的文档 cursor, err := mapLeagueCollection.Find(ctx, filter) if err != nil { clog.Errorf("[migrator - %d] Failed to find documents: %v", p.Version(), err) return false } list := []*MapLeagueTable{} if err := cursor.All(ctx, &list); err != nil { clog.Errorf("[migrator - %d] Failed to decode documents: %v", p.Version(), err) return false } for _, leagueTable := range list { leagueTable.LeagueInfo.LeagueApplys.Clear() } // // 构建批量更新对象 models := make([]mongo.WriteModel, 0, len(list)) for _, marchTable := range list { tableBytes, err := bson.Marshal(marchTable) if err != nil { clog.Errorf("[migrator - %d] marshal map march table error: %v", p.Version(), err) return false } // set update update := bson.D{{Key: "$set", Value: bson.Raw(tableBytes)}} // set filter filter := bson.M{ "_id": marchTable.PrimaryValue(), // 利用自带的_id主键进行条件过滤 } // build *mongo.UpdateOneModel model := mongo.NewUpdateOneModel().SetFilter(filter).SetUpdate(update).SetUpsert(true) models = append(models, model) } ops := options.BulkWrite().SetOrdered(false) result, err := mapLeagueCollection.BulkWrite(context.TODO(), models, ops) if err != nil { clog.Errorf("[migrator - %d] bulk write map march table error: %v", p.Version(), err) return false } clog.Infof("[migrator - %d] bulk write map league table success, count:%d", p.Version(), result.ModifiedCount) return true } func (p ver00007) Desc() string { return fmt.Sprintf("[migrator - %d] Fix LeagueApplys", p.Version()) }