英文:
How do i combine list of bson.M elements into a single bson.M in mongo in golang?
问题
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
}
我想要的格式是:
bson.M{"$inc": bson.M{"Google.ab.Value": 1, "AB.Value.to": 2}}
相同键的所有操作需要被追加。谢谢你的帮助。
英文:
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}}
All the operation of same key needs to be appended.Thank you in advance
答案1
得分: 0
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
}
英文:
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
}
This is what you can try
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论