Docs Menu
Docs Home
/ / /
C#/.NET
/ / /

ドキュメントの挿入

項目一覧

  • Overview
  • サンプル データ
  • _id フィールド
  • 1つのドキュメントの挿入
  • 複数のドキュメントの挿入
  • 挿入動作の変更
  • 順序付き動作の指定
  • 詳細情報
  • API ドキュメント

このガイドでは、MongoDB .NET/C# ドライバーを使用して挿入操作を実行し、MongoDB コレクションにドキュメントを追加する方法を学習できます。

挿入操作は、1 つ以上のドキュメントを MongoDB コレクションに挿入します。 .NET/C# ドライバーは、挿入操作を実行するための次のメソッドを提供します。それぞれに非同期バージョンと同期バージョンがあります。

  • InsertOneAsync() or InsertOne()

  • InsertManyAsync() or InsertMany()

Tip

インタラクティブ ラボ

このページには、 InsertOneAsync()メソッドを使用してデータを挿入する方法を示す短いインタラクティブ ラボが含まれています。 MongoDB やコード エディターをインストールしなくても、ブラウザ ウィンドウでこのラボを直接完了できます。

ラボを開始するには、ページ上部の [ Open Interactive Tutorialボタンをクリックします。 ラボを全画面形式に展開するには、ラボ ペインの右上隅にある全画面ボタン( )をクリックします。

このガイドの例では、 sample_restaurantsデータベースのrestaurantsコレクションを使用します。 このコレクションのドキュメントでは、次のRestaurantAddressGradeEntryクラスをモデルとして使用します。

public class Restaurant
{
public ObjectId Id { get; set; }
public string Name { get; set; }
[BsonElement("restaurant_id")]
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; }
[BsonElement("coord")]
public double[] Coordinates { get; set; }
public string Street { get; set; }
[BsonElement("zipcode")]
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 クラスターを無料で作成して、このサンプル データをロードする方法については、クイック スタートを参照してください。

MongoDB コレクションでは、各ドキュメントに一意のフィールド値を持つ_idフィールドが含まれている必要があります。

MongoDB では、このフィールドは次の 2 つの方法で管理できます。

  • このフィールドは各ドキュメントに自分で設定することができ、各_idフィールド値が一意であることを確認します。

  • ドライバーを使用して、各ドキュメント_idに対して一意のObjectId値を自動的に生成できます。 ドキュメントの_idフィールド値を手動で設定しない場合、ドライバーはフィールドにObjectIdを入力します。

一意性を保証できない限り、MongoDB ではドライバーに_id値を自動的に生成させることをお勧めします。

注意

重複した_id値は一意のインデックス制約に違反するため、ドライバーはInsertOne() MongoWriteExceptionを、またはInsertMany() MongoBulkWriteExceptionを返します。

_idフィールドの詳細については、一意なインデックス に関するサーバー マニュアル エントリを参照してください。

ドキュメント構造とルールの詳細については、ドキュメント に関するサーバー マニュアル エントリを参照してください。

次のコードは、非同期InsertOneAsync()メソッドまたは同期InsertOne()メソッドを使用して 1 つのドキュメントを挿入する方法を示しています。

await _restaurantsCollection.InsertOneAsync(document);
_restaurantsCollection.InsertOne(document);

次のコードは、非同期InsertManyAsync()メソッドまたは同期InsertMany()メソッドを使用して複数のドキュメントを挿入する方法を示しています。

await _restaurantsCollection.InsertManyAsync(docs);
_restaurantsCollection.InsertMany(docs);

Tip

これらのメソッドを使用して実行可能な例については、追加情報を参照してください。

InsertOne()メソッドは、挿入するドキュメントをパラメータとして受け取ります。 InsertMany()メソッドは、リストや配列などのドキュメントのIEnumerableコレクションをパラメータとして受け取ります。

オプションで、 InsertOne()メソッドは追加のパラメーターとしてInsertOneOptions型を受け取ります。これは、挿入操作を構成するために使用できるオプションを表します。 InsertOneOptionsプロパティを指定しない場合、ドライバーは挿入をカスタマイズしません。

InsertOneOptionsタイプでは、次のプロパティを持つオプションを構成できます。

プロパティ
説明
BypassDocumentValidation
Gets or sets a value indicating whether to bypass document validation. If true, allows the write to opt-out of document level validation.
Comment
Gets or sets the comment for the operation. See the insert command fields for more information.

InsertMany()メソッドはオプションとして、前述のBypassDocumentValidationCommentプロパティと追加のIsOrderedプロパティを持つInsertManyOptions型を追加のパラメータとして取ることができます。

プロパティ
説明
IsOrdered
Gets or sets a value indicating whether the requests are fulfilled in order. If true, the driver sends documents to the server in the order provided. If an error occurs, the driver and server abort all remaining insert operations. To learn more, see Ordered Behavior.
Default: true

次のコードでは、 InsertMany()メソッドを使用して、 BypassDocumentValidationtrueに設定されているコレクションに 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をスローしますが、エラーが発生したドキュメントの前のドキュメントはコレクションに挿入されます。

コレクション内を確認すると、次のドキュメントが表示されます。

{ "_id" : 1, "name" : "Restaurant A" }
{ "_id" : 2, "name" : "Restaurant B" }

挿入操作でIsOrderedfalseに設定すると、一部のドキュメントでエラーが発生しても、ドライバーはドキュメントの挿入を続行します。 この変更された挿入動作では、ドライバーは例外をスローしますが、エラーを生成しないすべてのドキュメントが挿入されます。

コレクション内を確認すると、次のドキュメントが表示されます。

{ "_id" : 1, "name" : "Restaurant A" }
{ "_id" : 2, "name" : "Restaurant B" }
{ "_id" : 3, "name" : "Restaurant D" }

挿入操作の実行可能な例については、次の使用例を参照してください。

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

戻る

書込み操作