以下の記事でMongoDBをコンテナとして実行したので、golangでそのデータを抽出します。
- MongoDBドライバーをダウンロードする
- ソースコードを書く
- 実行する
MongoDBドライバーをダウンロードする
まずは以下のコマンドでMongoDBのドライバーをダウンロードします。これはGoがサポートするドライバーで、ドキュメントはこちらになります。
以下のコマンドでダウンロードします。
$ go get -u "go.mongodb.org/mongo-driver/mongo"
ソースコードを書く
main.goを以下に記述しました。
/publicに対してhttpリクエストを受け付けると、MongoDBコンテナにアクセスして、recommendデータベースのcategoriesコレクションのデータを取得し、表示するプログラムです。
MongoDBコンテナの起動及び初期データ登録は、こちらの記事をご参照ください。
package main import ( "fmt" "log" "net/http" "time" "context" "github.com/gorilla/mux" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/bson" ) func main() { r := mux.NewRouter() // localhost:8082/publicでpublicハンドラーを実行 r.Handle("/public", public) //サーバー起動 if err := http.ListenAndServe(":8082", r); err != nil { log.Fatal("ListenAndServe:", nil) } } var public = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { //MongoDBの認証情報 credential := options.Credential{ Username: "root", Password: "password", } //MongoDBへの接続 ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() connect, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017").SetAuth(credential)) defer connect.Disconnect(ctx) //collectionの取得 collection, err := connect.Database("recommend").Collection("categories").Find(context.Background(), bson.M{}) if err != nil { log.Fatal(err) } var results []bson.M if err = collection.All(context.TODO(), &results); err != nil { log.Fatal(err) } //取得したcollectionの表示 for _, output := range results { fmt.Println( output["name"] ) } })
実行する
1. 以下のコマンドでgoを実行します。
$ go run .
2. 以下のコマンドでgoの/publicにhttpリクエストを送ります。
$ curl localhost:8082/public
そうすると、以下の出力が表示されます。
コレクションは_idとnameのmapが配列となっていて、その中でnameを抜き出しています。
スポーツ 娯楽 食事 お酒 文化 ドライブ 文化 イベント
以上です!今日は少し雑ですいません。。