如何在Mongo的Go模型中更新数组

时间:2015-10-31 12:17:21

标签: mongodb go mgo

我在Go for Mongo和模型级

中有玩家模型
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"`
}

如果我有PlayerModel(玩家指针)的实例,如何从PlayerModel更新Level? 玩家可以播放新的(尚未播放)级别(然后插入)或已经播放(如果时间已经低于已经达到的水平,则只需更新)。

1 个答案:

答案 0 :(得分:3)

如果这只是更新内存中的数据结构(无论是否映射MongoDB文档),可以应用一个天真的算法,例如:

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

请参阅以下示例:https://play.golang.org/p/C8SGqkgZ99