NodeJS 速習チュートリアル

Node.js MongoDB 挿入

1. コレクションへの挿入

MongoDBのコレクションにレコード(MongoDBではドキュメントと呼びます)を挿入するには、insertOne() メソッドを使用します。

MongoDBの「ドキュメント(Document)」は、MySQLにおける「レコード(Record)」に相当します。

insertOne() メソッドの第1引数は、挿入したいドキュメントの各フィールド名と値を格納したオブジェクトです。また、エラー処理や挿入結果をハンドリングするためのコールバック関数を引数にとります。

1.1 実装例:「customers」コレクションへのドキュメント挿入

let MongoClient = require('mongodb').MongoClient;
let url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  let dbo = db.db("mydb");
  // 挿入するドキュメントオブジェクトの定義
  let myobj = { name: "Company Inc", address: "Highway 37" };
  
  dbo.collection("customers").insertOne(myobj, function(err, res) {
    if (err) throw err;
    console.log("1件のドキュメントを挿入しました");
    db.close();
  });
});

上記の内容を demo_mongodb_insert.js というファイル名で保存し、実行してください。

demo_mongodb_insert.js の実行

C:\Users\Your Name>node demo_mongodb_insert.js

実行結果:

1 document inserted

       注意: 存在しないコレクションに対してドキュメントを挿入しようとした場合、MongoDBはそのコレクションを自動的に作成します。

2. 複数ドキュメントの挿入

複数のドキュメントを一度に挿入するには、insertMany() メソッドを使用します。

insertMany() メソッドの第1引数には、挿入したいデータを含むオブジェクトのアレイ(配列)を渡します。

2.1 実装例:一括データ挿入

let MongoClient = require('mongodb').MongoClient;
let url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  let dbo = db.db("mydb");
  // ドキュメントオブジェクトのアレイ
  let myobj = [
    { name: 'John', address: 'Highway 71'},
    { name: 'Peter', address: 'Lowstreet 4'},
    { name: 'Amy', address: 'Apple st 652'},
    { name: 'Hannah', address: 'Mountain 21'},
    { name: 'Michael', address: 'Valley 345'},
    { name: 'Sandy', address: 'Ocean blvd 2'},
    { name: 'Betty', address: 'Green Grass 1'},
    { name: 'Richard', address: 'Sky st 331'},
    { name: 'Susan', address: 'One way 98'},
    { name: 'Vicky', address: 'Yellow Garden 2'},
    { name: 'Ben', address: 'Park Lane 38'},
    { name: 'William', address: 'Central st 954'},
    { name: 'Chuck', address: 'Main Road 989'},
    { name: 'Viola', address: 'Sideway 1633'}
  ];
  
  dbo.collection("customers").insertMany(myobj, function(err, res) {
    if (err) throw err;
    // 挿入されたドキュメント数を表示
    console.log("挿入されたドキュメント数: " + res.insertedCount);
    db.close();
  });
});

demo_mongodb_insert_multiple.js の実行

C:\Users\Your Name>node demo_mongodb_insert_multiple.js

実行結果:

Number of documents inserted: 14

3. 結果オブジェクト (Result Object)

insertMany() メソッドを実行すると、挿入結果に関する情報を含む結果オブジェクトが返されます。

上記の例で返されるオブジェクトの構造は以下の通りです。

{
  result: { ok: 1, n: 14 },
  ops: [
    { name: 'John', address: 'Highway 71', _id: 58fdbf5c0ef8a50b4cdd9a84 },
    { name: 'Peter', address: 'Lowstreet 4', _id: 58fdbf5c0ef8a50b4cdd9a85 },
    // ...他のドキュメント
  ],
  insertedCount: 14,
  insertedIds: [
    58fdbf5c0ef8a50b4cdd9a84,
    58fdbf5c0ef8a50b4cdd9a85,
    // ...他のID
  ]
}

これらのプロパティは、以下のようにアクセスして利用できます。

例:挿入されたドキュメント数を取得

console.log(res.insertedCount); // 出力: 14

4. _id フィールド

ドキュメント挿入時に _id フィールドを指定しなかった場合、MongoDBは自動的にフィールドを追加し、各ドキュメントに一意のIDを割り当てます。

前述の例では _id を指定していませんが、結果オブジェクトを見ると、MongoDBによって一意の _id が割り当てられていることがわかります。

もし特定の _id を使用したい場合は、ドキュメント定義時に明示的に指定できます。ただし、その値はコレクション内で一意(ユニーク)でなければなりません。

4.1 実装例:_id を明示的に指定した挿入

let MongoClient = require('mongodb').MongoClient;
let url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  let dbo = db.db("mydb");
  let myobj = [
    { _id: 154, name: 'Chocolate Heaven'},
    { _id: 155, name: 'Tasty Lemon'},
    { _id: 156, name: 'Vanilla Dream'}
  ];
  
  dbo.collection("products").insertMany(myobj, function(err, res) {
    if (err) throw err;
    console.log(res);
    db.close();
  });
});

demo_mongodb_insert_id.js の実行

C:\Users\Your Name>node demo_mongodb_insert_id.js

実行結果には、指定したIDが insertedIds として反映されます。

{
  result: { ok: 1, n: 3 },
  ops: [
    { _id: 154, name: 'Chocolate Heaven' },
    { _id: 155, name: 'Tasty Lemon' },
    { _id: 156, name: 'Vanilla Dream' } ],
  insertedCount: 3,
  insertedIds: [ 154, 155, 156 ]
}