dsstjqsr631426 2018-02-06 04:42
浏览 97
已采纳

mongodb聚合在golang中给出错误

I want group methods types and count them according to their types.these methods are strings. I wrote below code.But it gives an error.

pipeline := []bson.D{
        bson.D{
            {"$unwind", "$method"},
        },
        bson.D{
            {"$group", bson.M{"_id": "$method", "count": bson.M{"$sum": 1}}},
        },
query := bson.D{
        {"aggregate", "API_ACCESS_LOGS"}, // useragents is a collection name
        {"pipeline", pipeline},
    }
  err = session.DB("vamps-logs").Run(query, &methods)

It gives below error.

2018/02/06 09:58:33 http: panic serving 127.0.0.1:53973: runtime error: index out of range goroutine 92 [running]:

please help me to correct this

  • 写回答

1条回答 默认 最新

  • duanhan8757 2018-02-06 08:00
    关注

    Hi this is a sample code I modified to use pipelines with MgO golang. Watch It and try to apply it. package main

    import ("fmt"
        "log"
        "gopkg.in/mgo.v2"
        "gopkg.in/mgo.v2/bson"
    )
    
    type Method struct {
            Type string `json:"Type" bson:"Type"`
            Host float64 `json:"Host" bson:"Host"`
    }
    
    type Out struct {
            Type string `json:"Type" bson:"Type"`
            Count float64 `json:"count" bson:"count"`
    }
    
    func main() {
    
            session, err := mgo.Dial("localhost")
            if err != nil {
                    panic(err)
            }
            defer session.Close()
    
            // Optional. Switch the session to a monotonic behavior.
            session.SetMode(mgo.Monotonic, true)
    
            c := session.DB("test").C("api")
            // err = c.Insert(&Method{"GET", 1.0},
               //         &Method{"PUT", 2.0},
               //         &Method{"POST", 2.0})
            if err != nil {
                    log.Fatal(err)
            }
    
            pipe := c.Pipe(
                    []bson.M{
                        bson.M{
                            "$unwind":"$Type",
                        },
                        bson.M{
                            "$group":bson.M{
                            "_id":"$Type", 
                            "count":bson.M{"$sum":1,},
                            },
                        },
                        bson.M{
                            "$project":bson.M{
                            "Type":"$_id" , "count":"$count",
                            },
                        },
                    },
                )
    
            result := []Out{}
            // err = c.Find(bson.M{"Type": "GET" }).One(&result)
                err = pipe.All(&result)
    
            if err != nil {
                    log.Fatal(err)
            }
    
            fmt.Println("Type:", result)
    }
    

    Dataset in the mongoDB

    /* 1 */
    {
        "_id" : ObjectId("5a794efd49d755038cc60307"),
        "Type" : "GET",
        "Host" : 1.0
    }
    
    /* 2 */
    {
        "_id" : ObjectId("5a794efd49d755038cc60308"),
        "Type" : "PUT",
        "Host" : 2.0
    }
    
    /* 3 */
    {
        "_id" : ObjectId("5a794efd49d755038cc60309"),
        "Type" : "POST",
        "Host" : 2.0
    }
    
    /* 4 */
    {
        "_id" : ObjectId("5a794f3149d755038cc6031a"),
        "Type" : "GET",
        "Host" : 1.0
    }
    
    /* 5 */
    {
        "_id" : ObjectId("5a794f3149d755038cc6031b"),
        "Type" : "PUT",
        "Host" : 2.0
    }
    
    /* 6 */
    {
        "_id" : ObjectId("5a794f3149d755038cc6031c"),
        "Type" : "POST",
        "Host" : 2.0
    }
    

    Out put

    Type: [{POST 2} {PUT 2} {GET 2}]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 聚类分析或者python进行数据分析
  • ¥15 如何用visual studio code实现html页面
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?