Edited at

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

追記


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)

おわりです