AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

CRUD 操作の実行を変更

このガイドでは、MongoDB Go ドライバーがレプリカセットの書込み保証読み取り保証、 読み込み設定( read preference ) 構成を使用して、作成、読み取り、更新、削除(CRUD)操作を実行する方法を変更する方法を学習します。

次のレベルで、書込み保証、読み取り保証、読み込み設定(read preference)のオプションを設定できます。

  • クライアント レベル。オーバーライドされない限り、すべての操作実行にデフォルトを設定します

  • セッション レベル

  • トランザクション レベル

  • データベース レベル

  • コレクション レベル

次のセクションでは、レプリカセット内のデータの整合性と可用性をカスタマイズする方法を学習できます。

書込み保証 (write concern) は、挿入やアップデートなどの書込み (write) 操作が成功として返される前に、この操作を確認する必要があるレプリカセット内のデータを保持するノードの数を示します。 デフォルトでは、 書込み保証 (write concern) では、書込み (write) 操作が成功と見なされる前に、 プライマリ レプリカセット のノードのみが書込み (write) 操作を確認する必要があります。

MongoDB Go ドライバーには、レプリカセットの書込み保証 (write concern) を指定できるwriteconcernパッケージが用意されています。 WriteConcernタイプのSetWriteConcern()メソッドを使用して書込み保証(write concern)を設定します。 WriteConcernタイプには、一般的な書込み保証の指定を選択するための次のメソッドがあります。

方式
説明

Custom()

クライアントは、書き込み操作が mongod インスタンスのタグ付きノードに伝播されたことの確認をリクエストします。詳細については、「書込み保証 (write concern) の仕様」を参照してください。

パラメーター: string

Journaled()

クライアントは、書き込み (write) 操作がオンディスクのジャーナルに書き込まれたことの確認をリクエストします。詳細については、書込み保証 (write concern) の仕様を参照してください。

パラメータ: なし

Majority()

クライアントは、書き込み操作がデータを保持する投票ノードの過半数に伝播されることを認識するようリクエストします。詳細については、書込み保証 (write concern) の仕様を参照してください。

パラメータ: なし

Unacknowledged()

クライアントは書き込み (write) 操作の確認応答をリクエストしません。詳細については、書込み保証 (write concern) の w: 0 の仕様を参照してください。

パラメータ: なし

W1()

クライアントは、書き込み (write) 操作がスタンドアロン mongod やレプリカセット内のプライマリなど 1 つのノードのメモリに書き込まれたことの確認を要求します。詳細については、書込み保証 (write concern) の w: 1 の仕様を参照してください。

パラメータ: なし

より特殊な書込み保証が必要な場合は、カスタムWriteConcern構造体リテラルを定義できます。 WriteConcern構造体で次のフィールドを設定できます。

フィールド
説明

W

操作を書き込むには、承認のために操作を伝播する必要がある mongod インスタンスまたはタグ付きノードの数を指定します。一般的な値には、10"majority" があります。

タイプ: string または int

Journal

書き込み (write) 操作を認識のためにオンディスク ジャーナルに書き込む必要があるかどうかを指定します。

タイプ: bool

WTimeout

書込み保証 (write concern) に関する制限時間を指定します。この設定は、1より大きいWの値にのみ適用されます。この設定とクライアントでのTimeoutの指定を同時に行うと、未定義の動作が発生します。詳細については、wtimeout の書込み保証 (write concern) 仕様を参照してください。

タイプ: time.Duration

Tip

あるいは、 接続stringで書込み保証 (write concern)を指定することもできます。 詳細については、書込み保証(write concern)オプションに関するサーバーのマニュアル エントリを参照してください。

次のコードは、クライアント レベルとコレクション レベルで異なる書込み保証を指定する方法を示しています。 クライアントレベルの書込み保証 (write concern) は、2 つのレプリカセット ノードからの確認を要求し、ジャーナリングをfalseに設定します。 コレクションレベルの書込み保証(write concern) は、レプリカセット ノードの過半数からの確認応答を要求します。

uri := "mongodb://<hostname>:<port>"
journal := false
cliWC := &writeconcern.WriteConcern{
W: 2,
Journal: &journal,
}
clOpts := options.Client().ApplyURI(uri).SetWriteConcern(cliWC)
client, err := mongo.Connect(context.TODO(), clOpts)
...
collWC := writeconcern.Majority()
collOpts := options.Collection().SetWriteConcern(collWC)
coll := client.Database("db").Collection("myColl", collOpts)

読み取り保証(read concern)オプションを使用すると、クライアントがクエリから返すデータを決定できます。 デフォルトの読み取り保証 (read concern) レベルは "local" です。つまり、クライアントはインスタンスの最新データを返しますが、そのデータがレプリカセットのノードの過半数に書き込まれたことは保証されません。

MongoDB Go ドライバーにはreadconcernパッケージが用意されており、レプリカセットの読み取り保証(read concern)を指定できます。 ReadConcernタイプのSetReadConcern()メソッドを使用して読み取り保証を設定します。 ReadConcernタイプでは、読み取り保証を指定するための次のメソッドがあります。

方式
説明

Available()

クエリはインスタンスからデータを返しますが、そのデータがレプリカセットのノードの大半に書き込まれたことを保証するものではありません。 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。

Linearizable()

クエリは、 majorityの 書込み保証(write concern) を使用して発行され、読み取り操作の開始前に確認されたすべての成功した書込みを反映したデータを返します。 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。

Local()

The query returns the instance’s most recent data. 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。

Majority()

このクエリは、レプリカセット内の過半数のノードに書き込まれたことが確認されたインスタンスの最新データを返します。 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。

Snapshot()

クエリでは、特定の時点におけるmongodインスタンスのデータの完全なコピーが返されます。 マルチドキュメントトランザクション 内の操作でのみ使用できます。 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。

次のコードは、「majority」の読み取り保証(read concern)を指定する方法を示しています。 次に、コードはこのオプションを持つCollectionを選択します。

rc := readconcern.Majority()
opts := options.Collection().SetReadConcern(rc)
database := client.Database("db")
coll := database.Collection("myCollection", opts)

読み込み設定(read preference)オプションは、MongoDB クライアントが読み取り操作を レプリカセット のノードにルーティングする方法を指定します。 デフォルトでは、アプリケーションの読み取り操作は、 レプリカセット 内の プライマリ を対象に行われます。

読み込み設定 (read preference) は、読み込み設定 (read preference) モードと、オプションのタグセット リストmaxStalenessSecondsオプション、およびヘッジされた読み取りオプションで構成されています。

MongoDB Go ドライバーには、レプリカセットの読み込み設定(read preference)を指定できるreadprefパッケージが用意されています。 読み込み設定(read preference)を設定するには、 SetReadPreference()メソッドをReadPrefタイプで使用します。 ReadPref型には、読み込み設定(read preference)を指定するための次のメソッドがあります。

方式
説明

Nearest()

クライアントは、指定されたレイテンシのしきい値に基づいて、プライマリまたはセカンダリである、ランダムに選択された適格なレプリカセットのメンバーから読み取ります。 詳細については、読み込み設定 (read preference) サーバーのマニュアル エントリを参照してください。

Primary()

クライアントは、現在のレプリカセット プライマリ ノードから読み取ります。 詳細については、読み込み設定 (read preference) サーバーのマニュアル エントリを参照してください。

PrimaryPreferred()

クライアントは、ほとんどの場合、プライマリ ノードからデータを読み取ります。 プライマリが使用できない場合、操作はセカンダリ ノードから読み取られます。 詳細については、読み込み設定 (read preference) サーバーのマニュアル エントリを参照してください。

Secondary()

クライアントはレプリカセットの セカンダリ メンバーから読み取ります。 詳細については、読み込み設定 (read preference) サーバーのマニュアル エントリを参照してください。

SecondaryPreferred()

クライアントはほとんどの場合、セカンダリ ノードからデータを読み取ります。 セカンダリが使用できない場合、操作はプライマリ ノードから読み取られます。 詳細については、読み込み設定 (read preference) サーバーのマニュアル エントリを参照してください。

Tip

または、 接続stringで読み込み設定(read preference)を指定することもできます。 詳細については、サーバー マニュアルの「 読み込み設定(read preference)オプション 」に関する記述を参照してください。

次のコードは、セカンダリ ノードから読み取るための読み込み設定 (read preference) を指定する方法を示しています。 次に、コードはこのオプションを持つDatabaseを選択します。

rp := readpref.Secondary()
opts := options.Database().SetReadPreference(rp)
database := client.Database("db", opts)

このガイドの概念の詳細については、次のサーバー ドキュメントを参照してください。