Overview
このガイドでは、MongoDB .NET/C# ドライバーを使用して挿入操作を実行し、MongoDB コレクションにドキュメントを追加する方法を学習できます。
挿入操作は、1 つ以上の ドキュメント をMongoDBコレクションに挿入します。.NET/ C#ドライバーは、挿入操作を実行するための次のメソッドを提供します。それぞれに同期バージョンと非同期バージョンがあります。
InsertOne() or ``InsertOneAsync()InsertMany()orInsertManyAsync()
Tip
インタラクティブ ラボ
このページには、 InsertOneAsync()メソッドを使用してデータを挿入する方法を示す短いインタラクティブ ラボが含まれています。 MongoDB やコード エディターをインストールしなくても、ブラウザ ウィンドウでこのラボを直接完了できます。
ラボを開始するには、ページ上部の [ Open Interactive Tutorial ] ボタンをクリックします。 ラボを全画面形式に展開するには、ラボ ペインの右上隅にある全画面ボタン( ⛶ )をクリックします。
サンプル データ
このガイドの例では、 sample_restaurantsデータベースのrestaurantsコレクションを使用します。 このコレクションのドキュメントでは、次のRestaurant 、 Address 、 GradeEntryクラスをモデルとして使用します。
public class Restaurant { public ObjectId Id { get; set; } public string Name { get; set; } [] public string RestaurantId { get; set; } public string Cuisine { get; set; } public Address Address { get; set; } public string Borough { get; set; } public List<GradeEntry> Grades { get; set; } }
public class Address { public string Building { get; set; } [] public double[] Coordinates { get; set; } public string Street { get; set; } [] public string ZipCode { get; set; } }
public class GradeEntry { public DateTime Date { get; set; } public string Grade { get; set; } public float? Score { get; set; } }
注意
restaurantsコレクションのドキュメントは、スニペット ケースの命名規則を使用します。このガイドの例では、ConventionPack を使用してコレクション内のフィールドをパスカル ケースに逆シリアル化し、Restaurantクラスのプロパティにマップします。
カスタム直列化について詳しくは、「カスタム直列化」を参照してください。
このコレクションは、Atlas が提供するサンプルデータセットから構成されています。無料のMongoDBクラスターを作成し、このサンプルデータをロードする方法については、 .NET/ C#ドライバーを使い始める を参照してください。
_id フィールド
MongoDB コレクションでは、各ドキュメントに一意のフィールド値を持つ_idフィールドが含まれている必要があります。
MongoDB では、このフィールドは次の 2 つの方法で管理できます。
このフィールドは各ドキュメントに自分で設定することができ、各
_idフィールド値が一意であることを確認します。ドライバーを使用して、各ドキュメント
_idに対して一意のObjectId値を自動的に生成できます。 ドキュメントの_idフィールド値を手動で設定しない場合、ドライバーはフィールドにObjectIdを入力します。
一意性を保証できない限り、MongoDB ではドライバーに_id値を自動的に生成させることをお勧めします。
注意
重複した_id値は一意のインデックス制約に違反するため、ドライバーはInsertOne() MongoWriteExceptionを、またはInsertMany() MongoBulkWriteExceptionを返します。
_idフィールドの詳細については、一意なインデックス に関するサーバー マニュアル エントリを参照してください。
ドキュメント構造とルールの詳細については、ドキュメント に関するサーバー マニュアル エントリを参照してください。
1つのドキュメントの挿入
次のコードは、同期 InsertOne() メソッドまたは非同期 InsertOneAsync() メソッドを使用して 1 つのドキュメントを挿入する方法を示しています。
_restaurantsCollection.InsertOne(document);
await _restaurantsCollection.InsertOneAsync(document);
複数のドキュメントの挿入
次のコードは、同期 InsertMany() メソッドまたは非同期 InsertManyAsync() メソッドを使用して複数のドキュメントを挿入する方法を示しています。
_restaurantsCollection.InsertMany(docs);
await _restaurantsCollection.InsertManyAsync(docs);
Tip
これらのメソッドを使用して実行可能な例については、追加情報を参照してください。
挿入動作の変更
InsertOne()メソッドは、挿入するドキュメントをパラメータとして受け取ります。 InsertMany()メソッドは、リストや配列などのドキュメントのIEnumerableコレクションをパラメータとして受け取ります。
オプションで、 InsertOne()メソッドは追加のパラメーターとしてInsertOneOptions型を受け取ります。これは、挿入操作を構成するために使用できるオプションを表します。 InsertOneOptionsプロパティを指定しない場合、ドライバーは挿入をカスタマイズしません。
InsertOneOptionsタイプでは、次のプロパティを持つオプションを構成できます。
プロパティ | 説明 |
|---|---|
| ドキュメント検証をバイパスするかどうかを示す値を取得または設定します。 |
| 操作のコメントを取得または設定します。 詳細については、 挿入コマンド フィールドを参照してください。 |
InsertMany()メソッドはオプションとして、前述のBypassDocumentValidationとCommentプロパティと追加のIsOrderedプロパティを持つInsertManyOptions型を追加のパラメータとして取ることができます。
プロパティ | 説明 |
|---|---|
| リクエストが順番に実行されるかどうかを示す値を取得または設定します。 デフォルト: |
例
次のコードでは、 InsertMany()メソッドを使用して、 BypassDocumentValidationがtrueに設定されているコレクションに 5 つの新しいRestaurantドキュメントを挿入します。
// Generates 5 new restaurants by using a helper method var restaurants = GenerateDocuments(); // Creates an option object to bypass documentation validation on the documents var options = new InsertManyOptions() { BypassDocumentValidation = true }; // Inserts the new documents into the restaurants collection with the specified options _restaurantsCollection.InsertMany(restaurants, options);
InsertMany() メソッドには戻り値がありません。コレクションに対して Find()操作を実行することで、ドキュメントが正常に挿入されたことを確認できます。ドキュメントを検索する方法の例については、データを検索する を参照してください。
順序付き動作の指定
たとえば、次のドキュメントを挿入するとします。
{ "_id" : 1, "name" : "Restaurant A" } { "_id" : 2, "name" : "Restaurant B" } { "_id" : 1, "name" : "Restaurant C" } { "_id" : 3, "name" : "Restaurant D" }
これらのドキュメントをデフォルトの InsertManyOptions で挿入しようとすると、_id 値が繰り返されているため、ドライバーは 3 番目のドキュメントで MongoBulkWriteException をスローします。この操作では、最初の 2 つのドキュメントのみがコレクションに追加されます。
{ "_id" : 1, "name" : "Restaurant A" } { "_id" : 2, "name" : "Restaurant B" }
挿入操作で IsOrdered を false に設定すると、一部のドキュメントでエラーが発生しても、ドライバーはドキュメントの挿入を続行します。この変更された挿入動作では、ドライバーは例外をスローしますが、エラーを生成しないすべてのドキュメントが挿入されます。
{ "_id" : 1, "name" : "Restaurant A" } { "_id" : 2, "name" : "Restaurant B" } { "_id" : 3, "name" : "Restaurant D" }
詳細情報
挿入操作の実行可能な例については、次の使用例を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。