前人未踏の領域へ WEB・インフラ・プログラミング全般編

フロントエンド、バックエンド、インフラ、言語など、アプリ開発、IOT以外の記録

GoからMongodbに接続

MongoDBにGo言語でアクセスする。

Go向けの公式Driverは提供されておらず、mgoを使うよう案内される。

labix.org

インストール

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))
}

参考

/* Responsive: yes */