猿问

golang中的mongodb聚合

我有一个这样的 mongodb 集合:


{

    source: "...",

    url:  "...",

    comments: [

        .....

    ]

}

我想根据评论数量找到前 5 个文档。我可以在命令提示符中使用以下查询找到所需的结果:


db.gmsNews.aggregate([

  {

     $match:{source:"..."}

  },

  {

     $unwind: "$comments"

  },

  {

     $group: {

        _id: "$url",

        size: {

           $sum: 1

        },

     }

  },

  {

     $sort : { size : -1 } 

  },

  { 

     $limit : 5

  }

])

这给了我以下输出:


{ "_id" : "...", "size" : 684 }

{ "_id" : "...", "size" : 150 }

现在我想使用 mgo 驱动程序将此查询转换为 golang。我通过以下方式使用管道:


o1 := bson.M{

        "$match" :bson.M {"source":"..."},

}


o2 := bson.M{

    "$unwind": "$comments",

}


o3 := bson.M{

    "$group": bson.M{

        "_id": "$url",

        "size": bson.M{

            "$sum": 1,

        },

    },

}


o4 := bson.M{

    "sort": bson.M{

        "size": -1,

    },

}


o5 := bson.M{

    "$limit": 5,

}


operations := []bson.M{o1, o2, o3, o4, o5}


pipe := c.Pipe(operations)


// Run the queries and capture the results

results := []bson.M{}

err1 := pipe.One(&results)


if err1 != nil {

    fmt.Printf("ERROR : %s\n", err1.Error())

    return

}


fmt.Printf("URL : %s, Size: %sn", results[0]["_id"], results[0]["size"])

不幸的是,这不起作用,我得到以下输出:


ERROR : Unsupported document type for unmarshalling: []bson.M

只是想知道我做错了什么以及如何解决这个问题。


慕尼黑5688855
浏览 286回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答