MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

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など他のアキュムレータ演算子にもそのまま応用可能です。

  1. MongoDBでnullではないことをチェックする方法|$ne演算子の使い方

    MongoDBでフィールドがnullではないことを確認したい場合、$ne(not equal)演算子を使用します。この記事では、実際にコレクションを作成しながら、null以外のドキュメントを抽出する方法を解説します。1. サンプルコレクションの作成まず、テスト用のコレクションにドキュメントを挿入してみましょう。> db.demo764.insertOne({"LoginUserName":"Chris","LoginPassword":"Chris_12"}); {    &qu

  2. MongoDBの集約(Aggregation)と投影(Projection)の使い方を解説

    MongoDBの集約と投影とはMongoDBで特定のフィールドだけを抽出しながらデータを加工したい場合、aggregate()メソッドと$projectステージを組み合わせるのが効果的です。$projectは、パイプライン内で指定されたフィールドを持つドキュメントだけを次のステージへ渡す役割を果たします。この記事では、実際にコレクションを作成し、$match・$unwind・$sort・$group・$projectを組み合わせた集約パイプラインの具体的な使い方を解説します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを含むコレクションを作成します。> db