NodeJS 速習チュートリアル

Node.js MongoDB クエリ

1. クエリによる結果のフィルタリング

MongoDBのコレクションからドキュメントを検索する際、クエリオブジェクト(Query Object)を使用することで、取得する結果をフィルタリング(Filtering)できます。

find() メソッドの第1引数にこのクエリオブジェクトを渡すことで、検索範囲を特定の条件に限定することが可能です。

1.1 実装例:住所(address)が "Park Lane 38" のドキュメントを検索する

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 query = { address: "Park Lane 38" };
  
  dbo.collection("customers").find(query).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});

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

demo_mongodb_query.js の実行

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

実行結果は以下のようになります。

[
  { _id: 58fdbf5c0ef8a50b4cdd9a8e , name: 'Ben', address: 'Park Lane 38' }
]

2. 正規表現(Regular Expressions)を用いたフィルタリング

より柔軟な検索を行いたい場合は、正規表現(Regular Expressions)を活用できます。なお、正規表現によるクエリは文字列(Strings)型のフィールドに対してのみ有効です。

例えば、address フィールドがアルファベットの "S" で始まるドキュメントのみを抽出したい場合は、正規表現 /^S/ を使用します。

2.1 実装例:住所が "S" で始まるドキュメントを検索する

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 query = { address: /^S/ };
  
  dbo.collection("customers").find(query).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});

demo_mongodb_query_s.js の実行

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

実行すると、以下のように住所が "S" から始まるレコードのみが出力されます。

[
  { _id: 58fdbf5c0ef8a50b4cdd9a8b , name: 'Richard', address: 'Sky st 331' },
  { _id: 58fdbf5c0ef8a50b4cdd9a91 , name: 'Viola', address: 'Sideway 1633' }
]