| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- 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())
- }
|