ver_00007.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package db
  2. import (
  3. "context"
  4. capp "f1-game/internal/cherry_app"
  5. nameDB "f1-game/internal/name/db"
  6. "fmt"
  7. clog "github.com/cherry-game/cherry/logger"
  8. "go.mongodb.org/mongo-driver/v2/bson"
  9. "go.mongodb.org/mongo-driver/v2/mongo"
  10. "go.mongodb.org/mongo-driver/v2/mongo/options"
  11. )
  12. // ver00007 修正联盟申请列表为nil的问题
  13. type ver00007 struct {
  14. }
  15. // Version 手动自增,必需唯一
  16. func (ver00007) Version() int32 {
  17. return 7
  18. }
  19. func (ver00007) Enable() bool {
  20. return false
  21. }
  22. func (p ver00007) Execute() bool {
  23. clog.Infof("Execute %v, nodeID = %s", p.Version(), capp.NodeID())
  24. ctx := context.Background()
  25. mapLeagueCollection := dbComponent.DB().Collection(nameDB.Table_MapLeague)
  26. filter := bson.M{
  27. "NodeID": capp.NodeID(),
  28. }
  29. // 查找需要修复的文档
  30. cursor, err := mapLeagueCollection.Find(ctx, filter)
  31. if err != nil {
  32. clog.Errorf("[migrator - %d] Failed to find documents: %v", p.Version(), err)
  33. return false
  34. }
  35. list := []*MapLeagueTable{}
  36. if err := cursor.All(ctx, &list); err != nil {
  37. clog.Errorf("[migrator - %d] Failed to decode documents: %v", p.Version(), err)
  38. return false
  39. }
  40. for _, leagueTable := range list {
  41. leagueTable.LeagueInfo.LeagueApplys.Clear()
  42. }
  43. // // 构建批量更新对象
  44. models := make([]mongo.WriteModel, 0, len(list))
  45. for _, marchTable := range list {
  46. tableBytes, err := bson.Marshal(marchTable)
  47. if err != nil {
  48. clog.Errorf("[migrator - %d] marshal map march table error: %v", p.Version(), err)
  49. return false
  50. }
  51. // set update
  52. update := bson.D{{Key: "$set", Value: bson.Raw(tableBytes)}}
  53. // set filter
  54. filter := bson.M{
  55. "_id": marchTable.PrimaryValue(), // 利用自带的_id主键进行条件过滤
  56. }
  57. // build *mongo.UpdateOneModel
  58. model := mongo.NewUpdateOneModel().SetFilter(filter).SetUpdate(update).SetUpsert(true)
  59. models = append(models, model)
  60. }
  61. ops := options.BulkWrite().SetOrdered(false)
  62. result, err := mapLeagueCollection.BulkWrite(context.TODO(), models, ops)
  63. if err != nil {
  64. clog.Errorf("[migrator - %d] bulk write map march table error: %v", p.Version(), err)
  65. return false
  66. }
  67. clog.Infof("[migrator - %d] bulk write map league table success, count:%d", p.Version(), result.ModifiedCount)
  68. return true
  69. }
  70. func (p ver00007) Desc() string {
  71. return fmt.Sprintf("[migrator - %d] Fix LeagueApplys", p.Version())
  72. }