MongoDBの集約でNULLを無視する条件付き$firstの使い方
MongoDBのaggregate()内で$match演算子を使用すると、NULL値を除外したうえで最初のレコード($first)を取得できます。この記事では、テスト用コレクションの作成から、NULLを無視する条件付き$firstクエリの実行までを、サンプルコードとともに段階的に解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使ってコレクションにドキュメントを挿入します。ここでは、「StudentSubject」フィールドがnullのドキュメントを意図的に含めているのがポイントです。
> db.conditionalFirstDemo.insertOne({_id:100,"StudentName":"Chris","StudentSubject":null});
{ "acknowledged" : true, "insertedId" : 100 }
> db.conditionalFirstDemo.insertOne({_id:101,"StudentName":"Chris","StudentSubject":null});
{ "acknowledged" : true, "insertedId" : 101 }
> db.conditionalFirstDemo.insertOne({_id:102,"StudentName":"Chris","StudentSubject":"MongoDB"});
{ "acknowledged" : true, "insertedId" : 102 }
> db.conditionalFirstDemo.insertOne({_id:103,"StudentName":"Chris","StudentSubject":"MongoDB"});
{ "acknowledged" : true, "insertedId" : 103 }
> db.conditionalFirstDemo.insertOne({_id:104,"StudentName":"Chris","StudentSubject":null});
{ "acknowledged" : true, "insertedId" : 104 }登録済みドキュメントの確認
find()メソッドを使えば、コレクション内のすべてのドキュメントを表示できます。
> db.conditionalFirstDemo.find();
実行結果は以下の通りです。
{ "_id" : 100, "StudentName" : "Chris", "StudentSubject" : null }
{ "_id" : 101, "StudentName" : "Chris", "StudentSubject" : null }
{ "_id" : 102, "StudentName" : "Chris", "StudentSubject" : "MongoDB" }
{ "_id" : 103, "StudentName" : "Chris", "StudentSubject" : "MongoDB" }
{ "_id" : 104, "StudentName" : "Chris", "StudentSubject" : null }NULLを無視する条件付き$firstクエリ
ここでのポイントは、$groupステージの前に$matchステージを配置することです。$matchで「StudentSubject」がnullではないドキュメントのみを先に絞り込むため、その後の$firstは必ずNULL以外の最初の値を返します。
> db.conditionalFirstDemo.aggregate([ { "$match": { "StudentSubject": { "$ne": null } } }, { "$group": { "_id": "$StudentName", "StudentSubject": { "$first": "$StudentSubject" } }} ]);実行結果:
{ "_id" : "Chris", "StudentSubject" : "MongoDB" }まとめ
$matchでNULLを事前に除外してから$groupと$firstを組み合わせることで、集約パイプラインでもNULLを無視した「最初の値」をシンプルに取得できます。この考え方は、$lastなど他のアキュムレータ演算子にもそのまま応用可能です。
-
MongoDBでnullではないことをチェックする方法|$ne演算子の使い方
MongoDBでフィールドがnullではないことを確認したい場合、$ne(not equal)演算子を使用します。この記事では、実際にコレクションを作成しながら、null以外のドキュメントを抽出する方法を解説します。1. サンプルコレクションの作成まず、テスト用のコレクションにドキュメントを挿入してみましょう。> db.demo764.insertOne({"LoginUserName":"Chris","LoginPassword":"Chris_12"}); { &qu
-
MongoDBの集約(Aggregation)と投影(Projection)の使い方を解説
MongoDBの集約と投影とはMongoDBで特定のフィールドだけを抽出しながらデータを加工したい場合、aggregate()メソッドと$projectステージを組み合わせるのが効果的です。$projectは、パイプライン内で指定されたフィールドを持つドキュメントだけを次のステージへ渡す役割を果たします。この記事では、実際にコレクションを作成し、$match・$unwind・$sort・$group・$projectを組み合わせた集約パイプラインの具体的な使い方を解説します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを含むコレクションを作成します。> db