Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

追記

Go言語でも

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

https://github.com/globalsign/mgo

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)

おわりです

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした