Aggregation in Golang mgo for Mongodb

故事扮演 提交于 2020-01-01 04:55:38

问题


Anybody knows what’s the equivalent of aggregate command we use in mongodb shell for golang mgo/bson?

Something like that:

aggregate([{$match:{my_id:ObjectId("543d171c5b2c1242fe0019")}},{$sort:{my_id:1, dateInfo:1, name:1}},{$group:{_id:"$my_id", lastEntry:{$max: "$dateInfo"},nm:{$last:"$name"}}}])

回答1:


Assuming that c is your Collection:

pipe := c.Pipe([]bson.M{{"$match": bson.M{"name":"John"}}})
resp := []bson.M{}
err := pipe.All(&resp)
if err != nil {
  //handle error
}
fmt.Println(resp) // simple print proving it's working

GoDoc references:

  • Collection.Pipe documentation
  • Pipe and its methods



回答2:


Sample Code:

pipe := c.Pipe([]bson.M{bson.M{"$match": bson.M{"type": "stamp"}},
        bson.M{"$group": bson.M{"_id": "$userid",
            "count": bson.M{"$sum": "$noofsr"}}}})

resp := []bson.M{}
iter := pipe.Iter()
err = iter.All(&resp)

Note:

Please note that the line should end with (,) if you are not breaking in (,) it will throw error message even if your query is correct.

Output:

{
    "transactions": [
        {
            "_id": "three@four.com",
            "count": 10
        },
        {
            "_id": "one@two.com",
            "count": 12
        }
    ]
}


来源:https://stackoverflow.com/questions/26456375/aggregation-in-golang-mgo-for-mongodb

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!