最近的項(xiàng)目在用mongodb雹姊,使用了mgo作為驅(qū)動(dòng),這里分享一些用法衡楞。
首先mgo的地址:
https://gopkg.in/mgo.v2
配套的bson地址:
https://gopkg.in/mgo.v2/bson
鏈接的方法很簡(jiǎn)單吱雏,有正確的mongodb的url就可以了。
這里說(shuō)一下mgo的一些操作瘾境,mgo的操作都是基于bson歧杏。可以說(shuō)操作mongo的過(guò)程就是一個(gè)控制bson結(jié)構(gòu)體的過(guò)程迷守,golang中構(gòu)建一個(gè)bson的結(jié)構(gòu)體是非常簡(jiǎn)單的得滤,如:
// Tag 標(biāo)簽類
type Tag struct {
ID bson.ObjectId `bson:"_id"`
TagName string `bson:"tag_name"`
TagVal interface{} `bson:"tag_val"`
TagGroup []int `bson:"tag_group"`
}
這里要注意的是,用ID作為查詢條件的時(shí)候盒犹,必須轉(zhuǎn)換成ObjectId對(duì)象懂更。如;
bson{"_id":bson.ObjectIdHex("xxxxxxxxxxxxx")}
bson是可以嵌套的急膀,因此我們可以組合出一個(gè)非常復(fù)雜的查詢沮协,如:
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使用上的區(qū)別,我理解下來(lái)卓嫂,find是根據(jù)條件“查詢”出一組集合對(duì)象慷暂,pipe使用一組“操作”來(lái)處理集合對(duì)象,這些“操作”包括了:匹配($match),分組($group)等晨雳。
go語(yǔ)言中使用mongo還是非常簡(jiǎn)單的行瑞,網(wǎng)上的教程也是非常多的,關(guān)鍵的是對(duì)于mongodb本身熟悉和了解餐禁。
大家有問(wèn)題可以給我留言血久。