Overview
このガイドでは、 Cドライバーを使用して 挿入操作 を実行し、 MongoDBコレクションにドキュメントを追加する方法を学習できます。
挿入操作は、1 つ以上の ドキュメント をMongoDBコレクションに挿入します。 次の関数を使用して、挿入操作を実行できます。
mongoc_collection_insert_one()単一のドキュメントを挿入する関数mongoc_collection_insert_many()1 つ以上のドキュメントを挿入する関数
サンプル データ
このガイドの例では、Atlas のサンプルデータセットから、sample_restaurantsデータベースのrestaurantsコレクションを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 MongoDBを使い始めるガイド を参照してください 。
_id フィールド
MongoDB コレクションでは、各ドキュメントに一意のフィールド値を持つ_idフィールドが含まれている必要があります。
MongoDB では、このフィールドは次の 2 つの方法で管理できます。
各ドキュメントの
_idフィールドを自分で設定し、各値が一意であることを確認します。ドライバーがドキュメント
_idフィールドごとに一意のbson_oid_t値を自動的に生成できるようにします。
一意性を保証できない限り、ドライバーに_id値を自動的に生成させることをお勧めします。
注意
重複した_id値はユニークインデックス制約に違反するため、ドライバーはmongoc_bulkwriteexception_tエラーを返します。
_idフィールドの詳細については、 マニュアルの 「 一意なインデックス 」MongoDB Server のガイドを参照してください。
ドキュメント構造とルールの詳細については、MongoDB Server マニュアルのドキュメントガイド を参照してください。
1つのドキュメントの挿入
MongoDBコレクションに単一のドキュメントを追加するには 、mongoc_collection_insert_one() 関数を呼び出し、次のパラメータを渡します。
ドキュメントを挿入するコレクション
挿入するドキュメント
操作をカスタマイズするオプション 、または
NULL操作結果を含む上書き可能なストレージへのポインター、または
NULLエラー値のロケーション、または
NULL
ドキュメントを挿入するには、次の構文を使用します。
bson_t *document = BCON_NEW("<field name>", BCON_UTF8("<value>")); bson_error_t error; if (!mongoc_collection_insert_one( collection, document, NULL, NULL, &error)) { fprintf(stderr, "Insert one operation failed: %s\n", error.message); } bson_destroy(document);
次の例では、 restaurantsコレクションにドキュメントを挿入します。
bson_t *document = BCON_NEW("name", BCON_UTF8("Mongo's Burgers")); bson_error_t error; if (!mongoc_collection_insert_one(collection, document, NULL, NULL, &error)) { fprintf(stderr, "Insert one operation failed: %s\n", error.message); } bson_destroy(document);
複数のドキュメントの挿入
MongoDBコレクションに複数のドキュメントを追加するには 、mongoc_collection_insert_many() 関数を呼び出し、次のパラメータを渡します。
ドキュメントを挿入するコレクション
挿入するドキュメントへのポインターの配列
挿入するドキュメントの数
操作をカスタマイズするオプション 、または
NULL操作結果を含む上書き可能なストレージへのポインター、または
NULLエラー値のロケーション、または
NULL
複数のドキュメントを挿入するには、次の構文を使用します。
size_t num_docs = 2; bson_t *docs[num_docs]; docs[0] = BCON_NEW("<field name>", BCON_UTF8("<value>")); docs[1] = BCON_NEW("<field name>", BCON_UTF8("<value>")); bson_error_t error; if (!mongoc_collection_insert_many(collection, (const bson_t **) docs, num_docs, NULL, NULL, &error)) { fprintf(stderr, "Insert many operation failed: %s\n", error.message); } bson_destroy(docs[0]); bson_destroy(docs[1]);
次の例では、 restaurantsコレクションに 2 つのドキュメントを挿入しています。
size_t num_docs = 2; bson_t *docs[num_docs]; docs[0] = BCON_NEW("name", BCON_UTF8("Mongo's Burgers")); docs[1] = BCON_NEW("name", BCON_UTF8("Mongo's Pizza")); bson_error_t error; if (!mongoc_collection_insert_many(collection, (const bson_t **) docs, num_docs, NULL, NULL, &error)) { fprintf(stderr, "Insert many operation failed: %s\n", error.message); } bson_destroy(docs[0]); bson_destroy(docs[1]);
挿入動作の変更
オプション値を指定するBSONドキュメントを渡すことで、mongoc_collection_insert_one() 関数と mongoc_collection_insert_many() 関数の動作を変更できます。 次の表では、ドキュメントに設定できるオプションの一部について説明しています。
オプション | 説明 |
|---|---|
|
|
| 操作の書込み保証 (write concern) を設定します。 |
|
|
| 操作に添付するコメント。詳細については、MongoDB Server マニュアルの「 insert コマンド フィールド 」ガイドを参照してください。 |
例
次のコードでは、mongoc_collection_insert_many() 関数を使用して、3 つの新しいドキュメントをコレクションに挿入します。 bypassDocumentValidationフィールドが true に設定されているため、この挿入操作はドキュメントレベルの検証をバイパスします。
size_t num_docs = 3; bson_t *docs[num_docs]; docs[0] = BCON_NEW("name", BCON_UTF8("Mongo's Burgers")); docs[1] = BCON_NEW("name", BCON_UTF8("Mongo's Pizza")); docs[2] = BCON_NEW("name", BCON_UTF8("Mongo's Tacos")); bson_t opts; bson_init(&opts); bson_append_bool(&opts, "bypassDocumentValidation", -1, true); bson_error_t error; if (!mongoc_collection_insert_many(collection, (const bson_t **) docs, num_docs, &opts, NULL, &error)) { fprintf(stderr, "Insert many operation failed: %s\n", error.message); } bson_destroy(docs[0]); bson_destroy(docs[1]); bson_destroy(docs[2]); bson_destroy(&opts);
詳細情報
API ドキュメント
このガイドで説明されている関数の詳細については、次のAPIドキュメントを参照してください。