ドキュメントの挿入
Overview
このガイドでは、 Cドライバーを使用して 挿入操作 を実行し、 MongoDBコレクションにドキュメントを追加する方法を学習できます。
挿入操作は 、1 つ以上の ドキュメント をMongoDBコレクションに挿入します。次の関数を使用して、挿入操作を実行できます。
mongoc_collection_insert_one()
単一のドキュメントを挿入する関数mongoc_collection_insert_many()
1 つ以上のドキュメントを挿入する関数
サンプル データ
このガイドの例では、 Atlas サンプル データセットのsample_restaurants
データベースのrestaurants
コレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 Atlas を使い始める 」ガイドを参照してください。
_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
次の例では、 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
次の例では、 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()
関数の動作を変更できます。次の表では、ドキュメントに設定できるオプションの一部について説明しています。
オプション | 説明 |
---|---|
| If set to true , allows the write operation to opt out of
document-level validation.Defaults to false .Type: bool |
| Sets the write concern for the operation. Defaults to the write concern of the namespace. Type: mongoc_write_concern_t |
| If set to true , the operation stops inserting documents when one insert
fails. If false , the operation continues to insert the remaining documents
when one insert fails. You cannot pass this option to the mongoc_collection_insert_one()
function.Defaults to true .Type: bool |
| A comment to attach to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. Type: bson_value_t |
例
次のコードでは、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ドキュメントを参照してください。