MongoDBにGo言語でアクセスする。
Go向けの公式Driverは提供されておらず、mgoを使うよう案内される。
インストール
go get gopkg.in/mgo.v2
Import
import ( "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" )
接続
Dial関数にURLを渡して接続する。他にDialWithTimeoutというタイムアウト付きのものがある。
session, err := mgo.Dial("192.168.33.13:27017") if err != nil { panic(err) } defer session.Close() //遅延実行。先に書いておく
Collectionを取得
mymovieというdbにfilmsというコレクションがあったとする。
type Film struct { Title string `json:"title"` } //コレクションを検索して値をセット c := session.DB("mymovie").C("films") result := Film{} err = c.Find(bson.M{"title": "Rocky"}).One(&result) //titleがRockeyのものを1件取得してresultに格納 //jsonにして標準出力 text, err := json.Marshal(result) fmt.Println(string(text))
コード
サンプル様にそれっぽく書き直してるので動かなかったら申し訳ない。
package main import ( "encoding/json" "fmt" "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" ) type Film struct { Title string `json:"title"` } func main() { PrintItems() } func PrintItems() { session, err := mgo.Dial("192.168.33.13:27017") if err != nil { panic(err) } defer session.Close() c := session.DB("mymovie").C("films") result := Item{} err = c.Find(bson.M{"title": "Rocky"}).One(&result) text, err := json.Marshal(result) fmt.Println(string(text)) }