Docs Menu
Docs Home
/ / /
Node.js ドライバー
/ / /

ドキュメントの挿入

項目一覧

  • Overview
  • に関するメモ _id
  • 単一ドキュメントのインサート
  • 複数のドキュメントの挿入

このガイドでは、MongoDB にドキュメントを 挿入 する方法を学習できます。

MongoDB を使用して、MongoDB にすでに保存されている情報を検索、更新、および削除できます。 情報を保存するには、挿入操作を使用します。

挿入操作は、1 つ以上のドキュメントを MongoDB コレクションに挿入します。 Node.js ドライバーは、挿入操作を実行するための次のメソッドを提供します。

  • insertOne()

  • insertMany()

  • bulkWrite()

Tip

インタラクティブ ラボ

このページには、 insertOne()メソッドを使用してデータを挿入する方法を示す短いインタラクティブ ラボが含まれています。 MongoDB やコード エディターをインストールしなくても、ブラウザ ウィンドウでこのラボを直接完了できます。

ラボを開始するには、ページ上部の [ Open Interactive Tutorialボタンをクリックします。 ラボを全画面形式に展開するには、ラボ ペインの右上隅にある全画面ボタン( )をクリックします。

次のセクションでは、 insertOne()insertMany()に焦点を当てます。 bulkWrite()メソッドの使用方法の例については、実行可能な一括操作の例を参照してください。

ドキュメントを挿入すると、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

このセクションで述べられたクラスとメソッドについて詳しくは、次のリソースを参照してください。

複数のドキュメントを挿入する場合は、 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

このセクションで述べられたクラスとメソッドについて詳しくは、次のリソースを参照してください。

戻る

書込み操作