我有一个这样的 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 resultsresults := []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只是想知道我做错了什么以及如何解决这个问题。
1 回答
- 1 回答
- 0 关注
- 285 浏览
添加回答
举报
0/150
提交
取消