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()に関するサーバー マニュアル エントリ
実行可能な複数ドキュメントの挿入の例