Golang + mgoを使う時にクエリはbson型にするんだよ、というお話

メリークリスマス。5号です。こんな時間にブログ書いている時点でお察し下さい。

そろそろネタが無くなって来たので、本当に小ネタで。

Golang + mongodbを利用する時にmgo

mgo - Rich MongoDB driver for Go

というドライバを使っているんですが、クエリを投げる時にベタにstringで

        var result ResultEntity
        query := "\"delete_flg\": 0"
        err := session.Find(query).All(&result)

みたいに書いてもクエリが動いてくれません。(かなり色々端折っています・・・。)

どうするかと言うと一度bson型に入れる必要があり、さらに中でネストされているような場合もそれをbsonにする必要があります。

        var result ResultEntity
    query := bson.M{"test": testid,
        "hoge_flg":      1,
        "fuga_flg":         0,
        "time_start_at": bson.M{"$lte": now},
    }

    err := session.Find(query).All(&result)

みたいに書くと動きます、というお話です。まあ、普通にちゃんとドキュメント読んだ人なら迷いません。ちなみに僕は初めの頃に今回の例で言うクエリ内の「{"$lte": now}」をbsonにしなくてドハマりした記憶があります。

以上、メリクリでした!