一部の機能を実装するのに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でインストールされるバージョンにはまだ含まれていません。