一部の機能を実装するのにgolangを利用することになり、DBはMongoDBだったので、以下のライブラリを使うことにしました。
もう一つ、gomongo(名前が紛らわしい)というのもあるそうですが、こっちは現リリース版のgolangだとコンパイルが通らなかったので、とりあえず、上記のものを利用しました。
githubのREADMEに情報が少なかったので、メモとして基本的な操作方法について記載しておきます。
基本操作
接続、コレクションの選択、切断
// 接続
conn, err := mongo.Dial("localhost:27017")
// コレクションの選択
c := mongo.Collection{conn, "hoge.foocollections", mongo.DefaultLastErrorCmd}
// 切断
conn.Close() |
SELECT
// 単数
// 値をマップに格納
var foo_map mongo.M
err := c.Find(nil).One(&foo_map)
log.Println(foo_map["_id"])
// 値を構造体に格納
type Foo struct {
Id mongo.ObjectId `bson:"_id"`
Name string `bson:"name"`
}
var foo Foo
err := c.Find(nil).One(&foo)
log.Println(foo.Id)
// 複数
cursor, err := c.Find(nil).Limit(10).Cursor()
for cursor.HasNext() {
var f Foo
err = cursor.Next(&f)
log.Println(f)
} |
INSERT
id := mongo.NewObjectId()
err = c.Insert(&Foo{Id: id, Name: "Tatsuya Fukata"}) |
UPDATE
// 引数: 検索条件, 更新情報
err = c.Update(mongo.M{"name": "Tatsuya Fukata"}, mongo.M{"name": "深田達也"}) |
DELETE
err = c.Remove(mongo.M{"name": "深田達也"}) |
BSONとGolangの変換表
go-mongoではBSONからgolang内の型変換は下記のようになっています。
// BSON -> Go
// Integer32 -> signed and unsigned integers, floats, bool
// Integer64 -> signed and unsigned integers, floats, bool
// Array -> []interface{}, other slice types
// Binary -> []byte
// Boolean -> bool
// Datetime -> mongo.Datetime, int64
// Document -> map[string]interface{}, struct types
// Double -> signed and unsigned integers, floats, bool
// MinValue, MaxValue -> mongo.MinMax
// ObjectID -> mongo.ObjectId
// Symbol -> mongo.Symbol, string
// Timestamp -> mongo.Timestamp, int64
// string -> string |
後でmasterブランチのテストコードを見てみると上記の方法ではなく、Queryに対してUpdateやRemoveメソッドが使えるようになっていたので、今後はメソッドチェインで検索条件を構築した後に、操作が行えるようにもなるみたいです。
これは、goinstallでインストールされるバージョンにはまだ含まれていません。