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

MongoDBでnull値を除外してドキュメントを取得する方法($ne演算子の使い方)

MongoDBでコレクション内のnull値を無視(除外)してドキュメントを取得したい場合、aggregate()の中で「$ne : null」を使用します。この記事では、実際にサンプルコレクションを作成し、null値を除外するクエリの書き方をステップごとに解説します。

1. サンプルコレクションの作成

まず、insertOne()メソッドを使って、配列フィールドに空文字・通常の文字列・nullが混在したドキュメントを持つコレクションを作成します。

> db.demo722.insertOne(
...     {
...        id:101,
...        details: [
...           { Name:""},
...           { Name: "David"},
...           {Name:null},
...           {Name:"Carol"}
...        ]
...     }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5eab07d543417811278f5889")
}

この例では、detailsという配列フィールドの中に、以下のような4つの要素が格納されています。

  • Name : "" … 空文字
  • Name : "David" … 通常の文字列
  • Name : null … null値
  • Name : "Carol" … 通常の文字列

2. 登録されたドキュメントの確認

find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。

> db.demo722.find();

実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5eab07d543417811278f5889"), "id" : 101, "details" : [ { "Name" : "" }, { "Name" : "David" }, { "Name" : null }, { "Name" : "Carol" } ] }

この時点では、null値を含む要素もそのまま表示されていることがわかります。

3. $ne : null を使ってnull値を除外する

null値を除外するには、集計パイプライン(aggregation pipeline)を組み立てます。ポイントは次の2つのステージです。

  • $unwind:配列フィールド(ここでは details)を分解し、各要素を個別のドキュメントとして扱えるようにします。
  • $match{ "details.Name" : { "$ne" : null } }という条件で、Nameフィールドがnullであるドキュメントをフィルタリングして除外します。

具体的なクエリは以下のとおりです。

> db.demo722.aggregate([
...     {"$unwind": "$details"},
...
...     {"$match": { "details.Name" :{ "$ne" : null } } }
... ])

実行結果

{ "_id" : ObjectId("5eab07d543417811278f5889"), "id" : 101, "details" : { "Name" : "" } }
{ "_id" : ObjectId("5eab07d543417811278f5889"), "id" : 101, "details" : { "Name" : "David" } }
{ "_id" : ObjectId("5eab07d543417811278f5889"), "id" : 101, "details" : { "Name" : "Carol" } }

出力を見ると、Nameがnullだった要素だけが除外され、空文字("")や「David」「Carol」の要素はそのまま残っていることが確認できます。

補足:$ne : null の挙動について

MongoDBにおいて { field: { $ne: null } } は、「そのフィールドが存在し、かつ値がnullでない」ドキュメントにマッチします。つまり、フィールド自体が存在しないドキュメントも同時に除外される点に注意してください。

また、空文字("")はnullとは異なる値として扱われるため、上記の例のように空文字のデータは結果に残ります。「空文字も除外したい」場合は、$nin: [null, ""] のように条件を組み合わせると対応できます。

  1. MongoDBで埋め込みドキュメント(配列内のサブドキュメント)をクエリする方法

    MongoDBの埋め込みドキュメントをクエリするには?MongoDBでは、ドキュメントの中に配列として埋め込まれたサブドキュメントをクエリする場合、aggregate()メソッドを使用するのが効果的です。この記事では、$unwindと$matchを組み合わせて、埋め込みドキュメントから条件に合うデータを抽出する手順を解説します。1. サンプルコレクションの作成まずは、学生情報を配列として持つドキュメントを含むコレクションを作成しましょう。insertOne()メソッドを使ってドキュメントを挿入します。> db.demo705.insertOne( ... { ...

  2. MySQLでNULL値を除外して残りの値だけを表示する方法

    MySQLでは、IS NOT NULL演算子を使うことで、NULL値を除外し、実際に値が存在するレコードだけを取得・表示できます。本記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 1. テーブルを作成する まず、学生名とスコアを格納するテーブルを作成します。 mysql> create table DemoTable1458     -> (     -> StudentName varchar(20),     ->