I have Player model in Go for Mongo and model Level
type LevelModel struct {
Index int `json: "index" bson: "index"`
Time int64 `json: "time" bson: "time"`
}
type PlayerModel struct {
ID bson.ObjectId `json: "_id, omitempty" bson: "_id, omitempty"`
Score int64 `json: "score" bson: "score"`
Level []LevelModel `json: "level" bson: "level"`
}
How to update Level from PlayerModel if I have instance of PlayerModel ( player pointer ) ? Player can play new ( not yet played ) level ( then insert ) or already played ( just update if time is lower then already achieved for that level ).
If this is just about updating a data structure in memory (whether it maps a MongoDB document or not), a naive algorithm can be applied, such as:
func (p *PlayerModel) updateLevel(idx int, time int64) {
for i := range p.Level {
lm := &(p.Level[i])
if lm.Index == idx {
if time < lm.Time {
lm.Time = time
}
return
}
}
p.Level = append(p.Level, LevelModel{idx, time})
}
See an example at: https://play.golang.org/p/C8SGqkgZ99