このチュートリアルは、Golang言語の視点からMongoDBの基本操作を紹介します。

注意:このチュートリアルでは、MongoDBが提供する公式のGo言語ドライバーパッケージを使用します。

前提チュートリアル

MongoDBチュートリアル

注意:MongoDBに慣れていない場合は、まずMongoDBの知識を学んでください。Golangチュートリアルでは関連する知識を繰り返しません。

基本要件

  • Go 1.10 以上
  • MongoDB 2.6 以上

依存関係のインストール

go get go.mongodb.org/mongo-driver/mongo

MongoDBへの接続

import (
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "go.mongodb.org/mongo-driver/mongo/readpref"
)

// MongoDB接続アドレス
uri := "mongodb://localhost:27017"
// コンテキストオブジェクトを取得し、タイムアウトを設定できます
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

// MongoDBに接続
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))

Connect関数はゴルーチンをブロックしません。つまり、Connectメソッドを呼び出した後に直接MongoDBを操作すると、MongoDBが正常に接続されていないためエラーが発生する可能性があります。MongoDBが正常に接続されているかどうかを確認するために、Pingメソッドを使用できます。

// MongoDBにPingし、正常に接続されていればエラーは返されません
err = client.Ping(ctx, readpref.Primary())

MongoDB接続アドレス

MongoDB接続アドレスには、サーバーアドレス、ポート番号、アカウント、パスワードなどの重要な情報が含まれます。 フォーマットは次のようになります。

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

例:

// デフォルトのユーザー名とパスワードでlocalhost:27017アドレスに接続する
mongodb://localhost:27017

// アカウント=root、パスワード=123456でlocalhost:27017アドレスに接続し、デフォルトのデータベース=adminに接続する
mongodb://root:123456@localhost:27017/admin

接続リソースの解放

接続が不要になった場合は、接続リソースを手動で解放する必要があります。

defer func() {
    if err = client.Disconnect(ctx); err != nil {
        panic(err)
    }
}()

コレクションインスタンスの取得

GolangでMongoDBを操作するには、まずコレクションインスタンスを取得し、その後でコレクションインスタンスでCRUD操作を行うことができます。

// Databaseを使用してデータベース名を設定し、Collectionを使用してコレクション名を設定します
collection := client.Database("testing").Collection("numbers")

注意:MongoDBの特性に従い、事前にデータベースやコレクションを作成する必要はありません。データが最初に書き込まれる際に自動的に作成されます。

ドキュメントの挿入

InsertOne 関数を使用してデータを挿入します。

// コンテキストオブジェクト、リクエストのタイムアウトを設定するためによく使用されます。以前に作成したコンテキストオブジェクトを再利用することもできます。再定義する必要はありません
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

// ドキュメントの挿入、ここでは JSON ドキュメントを表すために bson.D 型を使用します。bson.D は JSON 配列を表します
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})

// 追加された新しいドキュメントの ID を取得
id := res.InsertedID

以下のパッケージをインポートする必要があります:

import (
    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "go.mongodb.org/mongo-driver/mongo/readpref"
)

注意: Golang では、bson パッケージは JSON ドキュメントのデータ構造を表すために使用されます。次の章では、Golang での MongoDB データ格納構造の表現について詳しく説明します。