LoginSignup
75
59

More than 5 years have passed since last update.

Go言語でMongoDB使う ①インストール的なところ

Last updated at Posted at 2014-11-28

追記

Go言語でも

mongodb使いたいじゃないですか.

The MongoDB driver for Go

とりあえず動く、まで

  1. mongodbのインストール
    1. 割愛(brew install mongodb?)
    2. 個人的には docker run -it -p 27017:27017 --rm mongo がオススメです
  2. Goのインストール
    1. 割愛(brew install go?)
  3. mgoのインストール
  4. サンプルコード

mgoのインストール

おなじみのgo get

% go get -v github.com/globalsign/mgo

おしまい

サンプルコード

hoge.go
package main

import (
    "fmt"
    "log"

    "github.com/globalsign/mgo"
    "github.com/globalsign/mgo/bson"
)

type Person struct {
    ID   bson.ObjectId `bson:"_id"`
    Name string        `bson:"name"`
    Age  int           `bson:"age"`
}

func main() {
    session, _ := mgo.Dial("mongodb://localhost/test")
    defer session.Close()
    db := session.DB("test")

    /**
     * つくるところ
    **/
    ritsu := &Person{
        ID:   bson.NewObjectId(),
        Name: "田井中律",
        Age:  17,
    }
    col := db.C("people")
    if err := col.Insert(ritsu); err != nil {
        log.Fatalln(err)
    }

    /**
     * みつけるところ
    **/
    p := new(Person)
    query := db.C("people").Find(bson.M{})
    query.One(&p)

    /**
     * 結果
    **/
    fmt.Printf("%+v\n", p)
    // &{ID:ObjectIdHex("5478517a9871b9b8e42e2ee2") Name:田井中律 Age:17}
}

おしまいです. コピペしてgo run hoge.goしてみてください.

以下、メモ

importのところ

import (
    "fmt"
    "github.com/globalsign/mgo"
    "github.com/globalsign/mgo/bson"
)

structとmongo的なdocumentとのマッピングについて

type Person struct {
    // encoding/jsonパッケージなどでおなじみの`tag`が使える
    // `bson:"field_name"`で指定したフィールド名で
    // mongodbのドキュメントが保存される
    // また、取り出すときもこのフィールド名に対応したものがマッピングされる
    ID   bson.ObjectId `bson:"_id"`
    Name string        `bson:"name"`
    Age  int           `bson:"age"`
}

参考: http://godoc.org/labix.org/v2/mgo/bson

hostとのコネクションとか

func main() {
    // sessionはコネクションプーリングとかよしなにしてくれる
    session, _ := mgo.Dial("mongodb://localhost/test")
    // お行儀
    defer session.Close()
    // データベース名でDatabaseを取得
    db := session.DB("test")

参考: http://godoc.org/gopkg.in/mgo.v2#Session

Create系のメソッド

    ritsu := &Person{
        ID:   bson.NewObjectId(),
        Name: "田井中律",
        Age:  17,
    }
    // コレクション名でCollectionを取得
    col := db.C("people")
    // Insertメソッドを使う
    col.Insert(ritsu)

参考: http://godoc.org/gopkg.in/mgo.v2#Collection

Find系のメソッド

    // 参照用のstructを用意
    p := new(Person)
    // mongoのコンソールで{}で表現するものは
    // だいたい"bson.M{}"という形式で表現できる
    // bson.M{"created": bson.M{"$lt": time.Now()}} とか
    query := db.C("people").Find(bson.M{})
    // 遅延評価なので、実行されてない。Queryはあとから追加できる

参考: http://godoc.org/gopkg.in/mgo.v2#Query

    // ここでQueryが実行される
    query.One(&p)

おわりです

75
59
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
75
59