mongodb update添加每个地图结构的值

时间:2018-01-25 15:55:11

标签: mongodb go mgo

有地图数据{"a": 2, "c": 4: "d": 0}, 和MongoDB中的文档:

{
    ...
    Score: {
        "a": 1,
        "b": 2,
        "c": 0,
    }
}

更新后的文件:

{
    ...
    Score: {
        "a": 3,
        "b": 2,
        "c": 4,
        "d": 0,
    }
}

是我想要的,现在效果很好:

bson.M{"$inc": bson.M{"Score.a": 2,....}},

如何在不知道其密钥的情况下使用地图来更新MongoDB中的文档?映射到struct?或者使用MongoDB .map函数?

1 个答案:

答案 0 :(得分:0)

如果你有地图值,你知道它的键,你可以循环它们,并构建"动态"手动更新文档。

这就是它的样子:

m := map[string]int{
    "a": 2,
    "c": 4,
    "d": 0,
}

incDoc := bson.M{}
for k, v := range m {
    incDoc["Score."+k] = v
}
updateDoc := bson.M{"$inc": incDoc}

使用

打印结果
fmt.Printf("%#v\n", updateDoc)

输出将是:

bson.M{"$inc":bson.M{"Score.d":0, "Score.a":2, "Score.c":4}}