MongoDBのライブラリ
- 以前は
mgo
というライブラリが主流だったようです
- 最初にググったときに
mgo
の記事が見つかったので、ちょっと混乱しました。
- 現状だと
mongo-go-driver
らしいです
github.com
Mongoの接続
import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
connectionURI := fmt.Sprintf(
"mongodb://%s:%s@%s",
"username",
"password",
"mongodbendpoint:27017",
)
client, err := mongo.NewClient(options.Client().ApplyURI(connectionURI))
if err != nil {
return err
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
err = client.Connect(ctx)
if err != nil {
return err
}
err = client.Ping(ctx, nil)
if err != nil {
return err
}
Collectionへの書き込み
collection
は、RDBでいうところのテーブルのようなもののようです
- 以下は
db
というDBのcol
というcollectionに1レコード(ドキュメントという)追加する例です
// clientは上で取得したclient
col := client.Database("db").Collection("col")
document := bson.D{
{"type", "hogehoge"},
{"fuga", "gogo"},
}
_, err := col.InsertOne(context.Background(), document)
bson
という構造体によってdocumentを表現します
- 検索する条件等でもbsonは活躍します
bson.D
とbson.M
があり、書き方の違い?
FindOne
(検索して一件取得する)
- 最新の一件を取得して、それを
map[string]interface{}
に加工して取得しています
bson.D{{"_id", -1}}
この-1
でSortを降順にできる模様
col := client.Database("db").Collection("col")
// 最新1件を取得する
findOptions := options.FindOne().SetSort(bson.D{{"_id", -1}})
var doc bson.M
err := col.FindOne(
context.Background(),
opt,
findOptions,
).Decode(&doc)
if err == mongo.ErrNoDocuments {
return nil, nil
} else if err != nil {
return nil, err
}
result := make(map[string]interface{})
for key, val := range doc {
typ := reflect.TypeOf(val)
fmt.Printf("type:%s, key:%s, val:%v\n", typ, key, val)
result[key] = val
}
return result, nil
参考にした記事