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' }
]