日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Go使用mgo增删改查聚合操作

發(fā)布時(shí)間:2024/9/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go使用mgo增删改查聚合操作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

github.com/globalsign/mgo

查詢

查詢所有

query := func(c *mgo.Collection) (interface{}, error) {q := bson.M{"widget_id": param.WidgetId, "chart_id": param.ChartId, "is_show": bson.M{"$ne": 0}}var items []new_panel.Metricif err := c.Find(q).All(&items); err != nil {return nil, err}return items, nil } result, err := m.mongo.Execute(m.table, query) if err != nil {return nil, err } else {return result, nil }

查詢一個(gè)

query := func(c *mgo.Collection) (interface{}, error) {q := bson.M{"metric_id": item.MetricId, "widget_id": item.WidgetId, "chart_id": item.ChartId, "is_show": bson.M{"$ne": 0}}if err := c.Find(q).One(&metric); err != nil {return metric, err}return metric, nil }result, err := m.mongo.Execute(m.table, query) temp, _ := json.Marshal(result) err = json.Unmarshal(temp, &metric)if metric.MetricId == "" {return nil, err }if err != nil {return nil, err }

修改

query = func(c *mgo.Collection) (interface{}, error) {q := bson.M{"metric_id": metric.MetricId, "widget_id": metric.WidgetId, "chart_id": metric.ChartId, "is_show": bson.M{"$ne": 0}}if err = c.Update(q, metric); err != nil {return metric, err}return metric, nil } if _, err = m.mongo.Execute(m.table, query); err != nil {return metric, err }

新建

metric.Id = bson.NewObjectId() metric.IsShow = 1 metric.MetricName = string(time.Now().Unix()) metric.CreateTime = time.Now().Unix() metric.SaveTime = time.Now().Unix() if metric.WidgetId == "" {metric.WidgetId = uuid.New().String() } if metric.MetricId == "" {metric.MetricId = uuid.New().String() } query = func(c *mgo.Collection) (interface{}, error) {return metric.Id.Hex(), c.Insert(metric) }if _, err = m.mongo.Execute(m.table, query); err != nil {return metric, err } else {return metric, nil }

Upsert

query := func(c *mgo.Collection) (interface{}, error) {for _, v := range param.Info {query := bson.M{"chart_id": param.ChartId, "elem_id": v.ElemId}change := bson.M{"chart_id": ???param.ChartId,"elem_id": ????v.ElemId,"elem_name": ??v.ElemName,"widget_id": ??v.WidgetId,"widget_name": v.WidgetName,"create_time": time.Now().Unix(),"save_time": ??time.Now().Unix(),}_, err := c.Upsert(query, change)if err != nil {return nil, err}}return nil, nil } result, err := m.mongo.Execute(m.table, query) fmt.Println(result) if err != nil {return err } else {return nil }

聚合

query := func(c *mgo.Collection) (interface{}, error) {var pipeline []bson.Mmatch := bson.M{"chart_id": ChartId,"is_show": ?1,}group := bson.M{"_id": ????????bson.M{"chart_id": "$chart_id", "widget_name": "$widget_name"},"widget_id": ??bson.M{"$first": "$widget_id"},"widget_name": bson.M{"$first": "$widget_name"},}sort := bson.M{"widget_id": 1}pipeline = append(pipeline, bson.M{"$match": match})pipeline = append(pipeline, bson.M{"$group": group})pipeline = append(pipeline, bson.M{"$sort": sort})var res []struct {WidgetId ??string `json:"widget_id" bson:"widget_id"`WidgetName string `json:"widget_name" bson:"widget_name"`}err := c.Pipe(pipeline).All(&res)if err != nil {return nil, err}return res, nil } res, err := m.mongo.Execute(m.table, query)if err != nil {return nil, err } else {return res, nil }

總結(jié)

以上是生活随笔為你收集整理的Go使用mgo增删改查聚合操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。