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

ドキュメントの挿入

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

注意

16 MB のサイズ制限

MongoDB、個々のBSONドキュメントを 16 MB に制限しています。 ドキュメントが16 MB を超える場合は、代わりにGridFS API を使用します。

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

  • InsertOne() or ``InsertOneAsync()

  • InsertMany() or InsertManyAsync()

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クラスターを作成し、このサンプルデータをロードする方法については、 .NET/ C#ドライバーを使い始める を参照してください。

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

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

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

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

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

注意

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

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

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

次のコードは、同期 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タイプでは、次のプロパティを持つオプションを構成できます。

プロパティ
説明

BypassDocumentValidation

ドキュメント検証をバイパスするかどうかを示す値を取得または設定します。 trueの場合、 は書き込みがドキュメント レベルの検証をオプトアウトできるようにします。

Comment

操作のコメントを取得または設定します。 詳細については、 挿入コマンド フィールドを参照してください。

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

プロパティ
説明

IsOrdered

リクエストが順番に実行されるかどうかを示す値を取得または設定します。 trueの場合、ドライバーは指定された順序でドキュメントをサーバーに送信します。 エラーが発生した場合、ドライバーとサーバーは残りの挿入操作をすべて中止します。 詳しくは、「順序付き動作」を参照してください。

デフォルト: 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 をスローします。この操作では、最初の 2 つのドキュメントのみがコレクションに追加されます。

{ "_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 ドキュメントを参照してください。