【问题标题】:How do i combine list of bson.M elements into a single bson.M in mongo in golang?如何在golang的mongo中将bson.M元素列表组合成一个bson.M?
【发布时间】:2016-02-15 08:45:54
【问题描述】:
lstMap := make([]interface{}, 0)
lstMap = mongoOps.AddToBsonMap(lstMap, bson.M{"$inc": bson.M{"Google.ab.Value": 1}})
lstMap = mongoOps.AddToBsonMap(lstMap, bson.M{"$inc": bson.M{"Google.ab1.Value1": 1}})

func (o *MongoOps) AddToBsonMap(lstMap []interface{}, value interface{}) (result []interface{}) {
lstMap = append(lstMap, value)
return lstMap

}

 I want the in this format :
 bson.M{"$inc": bson.M{"Google.ab.Value": 1, "AB.Value.to": 2}}

同一个key的所有操作都需要追加。提前谢谢

【问题讨论】:

  • 为什么键“AB.Value.to”增加了2?这是一种类型还是因为它是第二个被添加的?

标签: mongodb go bson mgo


【解决方案1】:
func (o *MongoOps) AddToBsonMapElement(lstMap map[string]interface{},     Operation string, key string, value interface{}) (result map[string]interface{})     {
status, msg := EmptyStructCheck(o)
if status == true {
    LogError(msg)
    panic(msg)
}
if Operation == "$addToSetEach" {
    if _, ok := lstMap["$addToSet"]; ok {
        childmap := lstMap["$addToSet"]
        subchildmap := childmap.(map[string]interface{})
        var val map[string]interface{}
        val = make(map[string]interface{})
        val["$each"] = value
        subchildmap[key] = val
        lstMap["$addToSet"] = subchildmap

    } else {
        lstMap["$addToSet"] = bson.M{key: bson.M{"$each": value}}
    }

    fmt.Println(reflect.TypeOf(lstMap))
} else if _, ok := lstMap[Operation]; ok {
    childmap := lstMap[Operation]
    subchildmap := childmap.(map[string]interface{})
    subchildmap[key] = value
    lstMap[Operation] = subchildmap

} else {
    childmap := make(map[string]interface{}, 0)
    childmap[key] = value
    lstMap[Operation] = childmap
}

return lstMap
}

你可以试试这个

【讨论】:

    猜你喜欢
    • 2020-05-21
    • 1970-01-01
    • 2016-07-21
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    相关资源
    最近更新 更多