最近的项目在用mongodb,使用了mgo作为驱动,这里分享一些用法。
首先mgo的地址:
https://gopkg.in/mgo.v2
配套的bson地址:
https://gopkg.in/mgo.v2/bson
链接的方法很简单,有正确的mongodb的url就可以了。
这里说一下mgo的一些操作,mgo的操作都是基于bson。可以说操作mongo的过程就是一个控制bson结构体的过程,golang中构建一个bson的结构体是非常简单的,如:
// Tag 标签类type Tag struct { ID bson.ObjectId `bson:"_id"` TagName string `bson:"tag_name"` TagVal interface{} `bson:"tag_val"` TagGroup []int `bson:"tag_group"`}
这里要注意的是,用ID作为查询条件的时候,必须转换成ObjectId对象。如;
bson{"_id":bson.ObjectIdHex("xxxxxxxxxxxxx")}
bson是可以嵌套的,因此我们可以组合出一个非常复杂的查询,如:
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"])
另外注意下pipe和find使用上的区别,我理解下来,find是根据条件“查询”出一组集合对象,pipe使用一组“操作”来处理集合对象,这些“操作”包括了:匹配($match),分组($group)等。
go语言中使用mongo还是非常简单的,网上的教程也是非常多的,关键的是对于mongodb本身熟悉和了解。
大家有问题可以给我留言。
作者:小胖_白银狮子
链接:https://www.jianshu.com/p/ed1028c29f64