NodeJS 速習チュートリアル

Node.js MongoDB データの削除

1. ドキュメントの削除

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

deleteOne() メソッドの第1引数には、削除したいドキュメントを特定するためのクエリオブジェクト(Query Object)を指定します。

       注意: クエリが複数のドキュメントに一致した場合でも、deleteOne() は最初に一致した1件のみを削除します。

1.1 実装例:特定の住所を持つドキュメントを削除する

以下のコードは、address が「Mountain 21」であるドキュメントを削除する例です。

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 myquery = { address: 'Mountain 21' };
  
  dbo.collection("customers").deleteOne(myquery, function(err, obj) {
    if (err) throw err;
    console.log("1件のドキュメントを削除しました");
    db.close();
  });
});

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

demo_delete.js の実行

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

成功すると、以下の結果が表示されます。

1 document deleted

2. 複数のドキュメントを削除する

一度に複数のドキュメントを削除したい場合は、deleteMany() メソッドを使用します。
deleteMany() メソッドの第1引数にも、削除対象を定義するためのクエリオブジェクトを指定します。

2.1 実装例:正規表現を使用して一括削除する

以下の例では、address がアルファベットの「O」で始まるすべてのドキュメントを削除します。

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");
  
  // 住所が 'O' で始まるドキュメントを検索する正規表現クエリ
  let myquery = { address: /^O/ };
  
  dbo.collection("customers").deleteMany(myquery, function(err, obj) {
    if (err) throw err;
    // 削除された件数を表示
    console.log(obj.result.n + " 件のドキュメントを削除しました");
    db.close();
  });
});

demo_delete_many.js の実行

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

実行結果の例:

2 document(s) deleted

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

deleteMany() メソッドを実行すると、データベースへの操作結果に関する情報を含むオブジェクトが返されます。

このオブジェクトには多くのデータが含まれていますが、最も重要なのは result オブジェクトです。ここには、実行が正常に完了したかどうか、および何件のドキュメントが影響を受けたか(削除されたか)が示されています。

3.1 結果オブジェクトの構造

結果オブジェクトは以下のようになります。

{ n: 2, ok: 1 }
  • n: 削除されたドキュメントの数
  • ok: 操作が成功した場合は 1

3.2 削除件数の取得例

このオブジェクトを使用して、削除された正確な件数をプログラム内で取得し表示することができます。

// 削除されたドキュメント数を表示
console.log(obj.result.n);

出力結果:

2