MongoDBの集計パイプラインで$matchと$projectを使う方法
MongoDBの集計(アグリゲーション)パイプラインにおいて、$match と $project は最もよく使われるステージの2つです。それぞれの役割を理解しておくことで、柔軟なデータ処理が可能になります。
$matchと$projectの基本
$match は、指定した条件に一致するドキュメントだけをフィルタリングし、次のパイプラインステージへ渡す役割を持ちます。SQLのWHERE句に相当する機能です。
$project は、次のステージへ渡すドキュメントから、必要なフィールドだけを選択・整形する役割を持ちます。SQLのSELECT句のようなイメージです。
サンプルコレクションの作成
それでは、実際に例を見ていきましょう。まず、ドキュメントを含むコレクションを作成します。
> db.demo545.insert({Name:"Chris",details:{SubjectScore1:56,SubjectScore2:56}})
WriteResult({ "nInserted" : 1 })
> db.demo545.insert({Name:"David",details:{SubjectScore1:78,SubjectScore2:78}})
WriteResult({ "nInserted" : 1 })登録データの確認
find() メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo545.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e8e246e9e5f92834d7f05d5"), "Name" : "Chris", "details" : { "SubjectScore1" : 56, "SubjectScore2" : 56 } }
{ "_id" : ObjectId("5e8e24709e5f92834d7f05d6"), "Name" : "David", "details" : { "SubjectScore1" : 78, "SubjectScore2" : 78 } }$matchと$projectを組み合わせたクエリ
続いて、$match と $project を実装するクエリを見てみましょう。
> db.demo545.aggregate([
{$match:{}},
{$project:{"_id":0, "details.SubjectScore1":1, out:"$details.SubjectScore2"}},
{$group:{_id:"$out"}}
])このパイプラインでは、まず $match で全ドキュメントを通過させ、次に $project で _id を除外しつつ SubjectScore1 を残し、SubjectScore2 を「out」という新しいフィールドとして出力しています。最後に $group で out の値ごとにグループ化しています。
実行すると、以下の出力が得られます。
{ "_id" : 78 }
{ "_id" : 56 }まとめ
$match による絞り込みと $project によるフィールド選択を組み合わせることで、不要なデータを排除しながら、目的の形式に整えたデータを後段のステージへ渡せます。大量のドキュメントを扱う場合は、できるだけ早いステージで $match を使って絞り込むことで、パフォーマンスの向上も期待できます。
-
PythonでMongoDBを操作する方法|pymongoを使った基本操作入門
MongoDBは広く利用されているドキュメント指向データベースであり、NoSQLデータベースの一種です。Pythonはpymongoなどのモジュールを介してMongoDBと連携し、データの作成や操作を行うことができます。本記事では、その具体的な方法を解説します。なお、PythonからMongoDBへ接続するには、システムにMongoDBがあらかじめインストールされている必要があります。MongoDBのセットアップ手順については、専用のチュートリアル記事をご参照ください。 pymongoのインストール MongoDBとやり取りするには、pymongoというモジュールが必要です。以下のコマンドを
-
MongoDBの集約(Aggregation)と投影(Projection)の使い方を解説
MongoDBの集約と投影とはMongoDBで特定のフィールドだけを抽出しながらデータを加工したい場合、aggregate()メソッドと$projectステージを組み合わせるのが効果的です。$projectは、パイプライン内で指定されたフィールドを持つドキュメントだけを次のステージへ渡す役割を果たします。この記事では、実際にコレクションを作成し、$match・$unwind・$sort・$group・$projectを組み合わせた集約パイプラインの具体的な使い方を解説します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを含むコレクションを作成します。> db