Docs Menu

Docs HomeGo

一括操作

項目一覧

  • Overview
  • サンプル データ
  • 一括書き込み (write)
  • 動作の変更
  • Return Values
  • 操作
  • Insert
  • 置換
  • Update
  • 削除
  • 実行順序
  • ordered
  • 順序なし
  • 詳細情報
  • 関連操作
  • API ドキュメント

このガイドでは、一括操作の使用方法を学習できます。

一括操作は、多数の書込み操作を実行します。 一括操作では、操作ごとにデータベースへの呼び出しを行う代わりに、データベースへの 1 回の呼び出しで複数の操作を実行します。

このガイドの例を実行するには、次のスニペットを使用してサンプルデータを tea.ratingsコレクションにロードします。

coll := client.Database("tea").Collection("ratings")
docs := []interface{}{
bson.D{{"type", "Masala"}, {"rating", 10}},
bson.D{{"type", "Earl Grey"}, {"rating", 5}},
}
result, err := coll.InsertMany(context.TODO(), docs)
if err != nil {
panic(err)
}
fmt.Printf("Number of documents inserted: %d\n", len(result.InsertedIDs))

Tip

存在しないデータベースとコレクション

書き込み操作を実行するときに必要なデータベースとコレクションが存在しない場合は、サーバーが暗黙的にそれらを作成します。

各ドキュメントには、 フィールドとtype ratingフィールドに対応するお茶の種類の評価が含まれています。

注意

各例ではObjectID値が切り捨てられます。この値はドライバーが個別に生成するためです。

一括操作を実行するには、 WriteModelドキュメントのスライスをBulkWrite()メソッドに渡します。

BulkWrite()メソッドはオプションで、その動作を変更するために使用できるオプションを表すBulkWriteOptionsタイプを取ります。 BulkWriteOptionsを指定しない場合、ドライバーは各オプションのデフォルト値を使用します。

BulkWriteOptions タイプでは、次の方法でオプションを設定できます。

方式
説明
SetBypassDocumentValidation()
Whether to allow the write to opt-out of document level validation.
Default: false
SetOrdered()
Whether to stop performing write operations after an error occurs.
Default: true

BulkWrite()メソッドからは、成功した場合の一括操作に関する情報が含まれるBulkWriteResultタイプが返されます。 BulkWriteResult型には次のプロパティが含まれています。

プロパティ
説明
InsertedCount
挿入されたドキュメントの数。
MatchedCount
アップデート操作と置換操作でクエリフィルターに一致したドキュメントの数。
ModifiedCount
更新操作と置換操作によって変更されたドキュメントの数。
DeletedCount
削除されたドキュメントの数。
UpsertedCount
更新操作と置換操作によってアップサートされたドキュメントの数。
UpsertedIDs
アップサートされたドキュメントの_idへの操作インデックスのマッピング。

WriteModelは、挿入、置換、更新、または削除操作を表します。

挿入操作を実行するには、挿入するドキュメントを指定するInsertOneModelを作成します。 複数のドキュメントを挿入するには、挿入するドキュメントごとにInsertOneModelを作成します。

InsertOneModelでは、次の方法で動作を指定できます。

方式
説明
SetDocument()
The document to insert.

次の例では、2 つのドキュメントを挿入するために 2 つのInsertOneModelインスタンスを作成します。

models := []mongo.WriteModel{
mongo.NewInsertOneModel().SetDocument(bson.D{{"type", "Oolong"}, {"rating", 9}}),
mongo.NewInsertOneModel().SetDocument(bson.D{{"type", "Assam"}, {"rating", 6}}),
}

置換操作を実行するには、置換するドキュメントと置換ドキュメントを指定するReplaceOneModelを作成します。 複数のドキュメントを置き換えるには、置き換えるドキュメントごとにReplaceOneModelを作成します。

ReplaceOneModelでは、次のメソッドで動作を指定できます。

方式
説明
SetCollation()
The type of language collation to use when sorting results.
SetFilter()
The query filter specifying which document to replace.
SetHint()
The index to use to scan for documents.
SetReplacement()
The document to replace the matched document with.
SetUpsert()
Whether to insert a new document if the query filter doesn't match any documents.

次の例では、 ReplaceOneModelを作成して、 typeが "Earl gre" であるドキュメントと、 typeが "Matcha" で、 rating8であるドキュメントを置き換えます。

models := []mongo.WriteModel{
mongo.NewReplaceOneModel().SetFilter(bson.D{{"type", "Earl Grey"}}).
SetReplacement(bson.D{{"type", "Matcha"}, {"rating", 8}}),
}

更新操作を実行するには、更新するドキュメントを指定するUpdateOneModel更新ドキュメントを作成します。 複数のドキュメントを更新するには、 UpdateManyModelを使用します。

UpdateOneModelUpdateManyModelでは、次のメソッドで動作を指定できます。

方式
説明
SetArrayFilters()
The array elements the update applies to.
SetCollation()
The type of language collation to use when sorting results.
SetFilter()
The query filter specifying which document to update.
SetHint()
The index to use to scan for documents.
SetUpdate()
The modifications to apply on the matched documents.
SetUpsert()
Whether to insert a new document if the query filter doesn't match any documents.

次の例では、ドキュメントtypeが「Masala」の場合、ドキュメントrating2ずつ減算するためのUpdateOneModelを作成します。

models := []mongo.WriteModel{
mongo.NewUpdateOneModel().SetFilter(bson.D{{"type", "Masala"}}).
SetUpdate(bson.D{{"$inc", bson.D{{"rating", -2}}}}),
}

削除操作を実行するには、削除するドキュメントを指定してDeleteOneModelを作成します。 複数のドキュメントを削除するには、 DeleteManyModelを使用します。

DeleteOneModelDeleteManyModelでは、次のメソッドで動作を指定できます。

方式
説明
SetCollation()
The type of language collation to use when sorting results.
SetFilter()
The query filter specifying which document to delete.
SetHint()
The index to use to scan for documents.

次の例では、 rating7より大きいドキュメントを削除するためにDeleteManyModelを作成しています。

models := []mongo.WriteModel{
mongo.NewDeleteManyModel().SetFilter(bson.D{{"rating", bson.D{{"$gt", 7}}}}),
}

BulkWrite()メソッドでは、 BulkWriteOptionsで一括操作を順序付きで実行するか、順序なしで実行するかを指定できます。

デフォルトでは、 BulkWrite()メソッドは一括操作を追加した順序で実行され、エラーが発生した場合は停止します。

Tip

これは、 SetOrdered()メソッドでtrueを指定することと同じです。

opts := options.BulkWrite().SetOrdered(true)

一括書き込み操作を任意の順序で実行し、エラーが発生した場合に続行するには、 SetOrdered()メソッドにfalseを指定します。 メソッドはその後エラーを報告します。

次の例では、次のアクションを任意の順序で実行します。

  • 2 つのドキュメントを挿入します。

  • タイプが「Earl gre」であるドキュメントを新しいドキュメントに置き換えます。

  • 現在の評価が7未満の場合、すべてのドキュメントrating3ずつ増加させます。

  • 評価が9であるすべてのドキュメントを削除します。

models := []mongo.WriteModel{
mongo.NewInsertOneModel().SetDocument(bson.D{{"type", "Oolong"}, {"rating", 9}}),
mongo.NewInsertOneModel().SetDocument(bson.D{{"type", "Assam"}, {"rating", 6}}),
mongo.NewReplaceOneModel().SetFilter(bson.D{{"type", "Earl Grey"}}).
SetReplacement(bson.D{{"type", "Matcha"}, {"rating", 4}}),
mongo.NewUpdateManyModel().SetFilter(bson.D{{"rating", bson.D{{"$lt", 7}}}}).
SetUpdate(bson.D{{"$inc", bson.D{{"rating", 3}}}}),
mongo.NewDeleteManyModel().SetFilter(bson.D{{"rating", 9}}),
}
opts := options.BulkWrite().SetOrdered(false)
results, err := coll.BulkWrite(context.TODO(), models, opts)
if err != nil {
panic(err)
}
fmt.Printf("Number of documents inserted: %d\n", results.InsertedCount)
fmt.Printf("Number of documents replaced or updated: %d\n", results.ModifiedCount)
fmt.Printf("Number of documents deleted: %d\n", results.DeletedCount)

一括操作後に次のドキュメントがratingsコレクションに存在します。

[{_id ObjectID("...")} {type Masala} {rating 10}]
[{_id ObjectID("...")} {type Matcha} {rating 7}]

一括操作の実行可能な例については、 「 一括操作の実行 」を参照してください。

上記の操作の実行方法の詳細については、次のガイドを参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。

←  1 回の操作で挿入またはアップデート複合演算子 →
フィードバックを送る
© 2022 MongoDB, Inc.

会社概要

© 2022 MongoDB, Inc.