ドキュメントの挿入
Overview
このガイドでは、MongoDB にドキュメントを 挿入 する方法を学習できます。
MongoDB を使用して、MongoDB にすでに保存されている情報を検索、更新、および削除できます。 情報を保存するには、挿入操作を使用します。
挿入操作は、1 つ以上のドキュメントを MongoDB コレクションに挿入します。 Node.js ドライバーは、挿入操作を実行するための次のメソッドを提供します。
insertOne()
insertMany()
bulkWrite()
Tip
インタラクティブ ラボ
このページには、 insertOne()
メソッドを使用してデータを挿入する方法を示す短いインタラクティブ ラボが含まれています。 MongoDB やコード エディターをインストールしなくても、ブラウザ ウィンドウでこのラボを直接完了できます。
ラボを開始するには、ページ上部の [ Open Interactive Tutorialボタンをクリックします。 ラボを全画面形式に展開するには、ラボ ペインの右上隅にある全画面ボタン( ⛶ )をクリックします。
次のセクションでは、 insertOne()
とinsertMany()
に焦点を当てます。 bulkWrite()
メソッドの使用方法の例については、実行可能な一括操作の例を参照してください。
に関するメモ _id
ドキュメントを挿入すると、MongoDB はデフォルトでドキュメントに 1 つの制約を強制します。 各ドキュメントには一意の_id
フィールドが含まれている必要があります。
このフィールドを管理するには、次の 2 つの方法があります。
このフィールドは自分で管理し、使用する各値が一意であることを確認できます。
ドライバーはプライマリキー ファクトリを使用して一意の
ObjectId
値を自動的に生成できます。
一意性について強力な保証を提供していない限り、ドライバーに_id
値を自動的に生成させることをお勧めします。
注意
重複した_id
値は一意のインデックス制約に違反し、 WriteError
が返されます。
_id
の詳細については、 一意なインデックス に関するサーバー マニュアルのエントリを参照してください。
単一ドキュメントのインサート
単一のドキュメントを挿入する場合は、 insertOne()
メソッドを使用します。
挿入に成功すると、メソッドは新しいドキュメントの_id
を表すInsertOneResult
インスタンスを返します。
例
次の例では、 insertOne()
メソッドを使用して新しいドキュメントをmyDB.pizzaMenu
コレクションに挿入しています。
const myDB = client.db("myDB"); const myColl = myDB.collection("pizzaMenu"); const doc = { name: "Neapolitan pizza", shape: "round" }; const result = await myColl.insertOne(doc); console.log( `A document was inserted with the _id: ${result.insertedId}`, );
出力は、次のテキストのようになります。
A document was inserted with the _id: 60c79c0f4cc72b6bb31e3836
このセクションで述べられたクラスとメソッドについて詳しくは、次のリソースを参照してください。
insertOne() に関するAPIドキュメント
InsertOneResult に関する API ドキュメント
insertOne()に関するサーバー マニュアル エントリ
複数のドキュメントの挿入
複数のドキュメントを挿入する場合は、 insertMany()
メソッドを使用します。 このメソッドは、例外が発生するまで、指定された順序でドキュメントを挿入します。
たとえば、次のドキュメントを挿入するとします。
{ "_id": 1, "color": "red" } { "_id": 2, "color": "purple" } { "_id": 1, "color": "yellow" } { "_id": 3, "color": "blue" }
これらのドキュメントを挿入しようとすると、3 番目のドキュメントが処理されるときにWriteError
が発生しますが、エラーの前のドキュメントはコレクションに挿入されます。
注意
エラーが発生する前に、正常に処理されたドキュメントの確認応答を取得するには、try-catch ブロックを使用します。
const myDB = client.db("myDB"); const myColl = myDB.collection("colors"); try { const docs = [ { "_id": 1, "color": "red"}, { "_id": 2, "color": "purple"}, { "_id": 1, "color": "yellow"}, { "_id": 3, "color": "blue"} ]; const insertManyresult = await myColl.insertMany(docs); let ids = insertManyresult.insertedIds; console.log(`${insertManyresult.insertedCount} documents were inserted.`); for (let id of Object.values(ids)) { console.log(`Inserted a document with id ${id}`); } } catch(e) { console.log(`A MongoBulkWriteException occurred, but there are successfully processed documents.`); let ids = e.result.result.insertedIds; for (let id of Object.values(ids)) { console.log(`Processed a document with id ${id._id}`); } console.log(`Number of documents inserted: ${e.result.result.nInserted}`); }
出力は MongoDB が処理できるドキュメントで構成され、次のようになります。
A MongoBulkWriteException occurred, but there are successfully processed documents. Processed a document with id 1 Processed a document with id 2 Processed a document with id 1 Processed a document with id 3 Number of documents inserted: 2
コレクション内を確認すると、次のドキュメントが表示されます。
{ "_id": 1, "color": "red" } { "_id": 2, "color": "purple" }
挿入に成功すると、メソッドは挿入されたドキュメントの数を表すInsertManyResult
インスタンスと新しいドキュメントの_id
を返します。
例
次の例では、 insertMany()
メソッドを使用して、3 つの新しいドキュメントをmyDB.pizzaMenu
コレクションに挿入しています。
const myDB = client.db("myDB"); const myColl = myDB.collection("pizzaMenu"); const docs = [ { name: "Sicilian pizza", shape: "square" }, { name: "New York pizza", shape: "round" }, { name: "Grandma pizza", shape: "square" } ]; const insertManyresult = await myColl.insertMany(docs); let ids = insertManyresult.insertedIds; console.log(`${insertManyresult.insertedCount} documents were inserted.`); for (let id of Object.values(ids)) { console.log(`Inserted a document with id ${id}`); }
出力は、次のようになります。
3 documents were inserted. Inserted a document with id 60ca09f4a40cf1d1afcd93a2 Inserted a document with id 60ca09f4a40cf1d1afcd93a3 Inserted a document with id 60ca09f4a40cf1d1afcd93a4
このセクションで述べられたクラスとメソッドについて詳しくは、次のリソースを参照してください。
insertMany() に関する API ドキュメント
InsertManyResult の API ドキュメント
PkFactory に関する API ドキュメント
insertMany()に関するサーバー マニュアル エントリ
実行可能な複数ドキュメントの挿入の例