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

null値が含まれる場合、MongoDBでORDER BY(ソート)を実行する方法

ドキュメントの中にnull値が含まれている場合でも、sort()メソッドを使うことで、SQLのORDER BYに相当するソート処理を実現できます。

$orderby演算子は非推奨

注意: MongoDB v3.2以降、mongoシェルにおける$orderby演算子は非推奨(deprecated)となりました。今後はcursor.sort()を使用することが推奨されています。

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

まず、ドキュメントを含むコレクションを作成します。

> db.demo530.insertOne({"Name":"Chris"});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b2990ef4dcbee04fbbbec")
}
> db.demo530.insertOne({"Name":null});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b2991ef4dcbee04fbbbed")
}
> db.demo530.insertOne({"Name":"David"});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b2992ef4dcbee04fbbbee")
}
> db.demo530.insertOne({"Name":"Adam"});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b2995ef4dcbee04fbbbef")
}
> db.demo530.insertOne({"Name":null});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b2999ef4dcbee04fbbbf0")
}
> db.demo530.insertOne({"Name":"Carol"});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b299eef4dcbee04fbbbf1")
}

find()で全ドキュメントを表示

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

> db.demo530.find();

このクエリを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e8b2990ef4dcbee04fbbbec"), "Name" : "Chris" }
{ "_id" : ObjectId("5e8b2991ef4dcbee04fbbbed"), "Name" : null }
{ "_id" : ObjectId("5e8b2992ef4dcbee04fbbbee"), "Name" : "David" }
{ "_id" : ObjectId("5e8b2995ef4dcbee04fbbbef"), "Name" : "Adam" }
{ "_id" : ObjectId("5e8b2999ef4dcbee04fbbbf0"), "Name" : null }
{ "_id" : ObjectId("5e8b299eef4dcbee04fbbbf1"), "Name" : "Carol" }

null値を含むデータをsort()で並べ替える

null値が含まれる場合でも、aggregate()パイプラインで$match$sortを組み合わせることで、ORDER BY相当の並べ替えが可能です。

> db.demo530.aggregate([
...     {$match: {"Name": {$exists: true}}}
...     ,
...     {$sort: { "Name": 1}}
... ]);

実行すると、次のように出力されます。

{ "_id" : ObjectId("5e8b2991ef4dcbee04fbbbed"), "Name" : null }
{ "_id" : ObjectId("5e8b2999ef4dcbee04fbbbf0"), "Name" : null }
{ "_id" : ObjectId("5e8b2995ef4dcbee04fbbbef"), "Name" : "Adam" }
{ "_id" : ObjectId("5e8b299eef4dcbee04fbbbf1"), "Name" : "Carol" }
{ "_id" : ObjectId("5e8b2990ef4dcbee04fbbbec"), "Name" : "Chris" }
{ "_id" : ObjectId("5e8b2992ef4dcbee04fbbbee"), "Name" : "David" }

ポイント解説

  • $match: { "Name": { $exists: true } } — フィールド「Name」が存在するドキュメントのみを対象にします。値がnullでもフィールド自体は「存在する」とみなされるため、nullのドキュメントは除外されません。
  • $sort: { "Name": 1 } — 昇順(1)で並べ替えます。MongoDBでは昇順ソート時にnullが最小値として扱われ、文字列よりも先に配置されます。
  • 降順に並べたい場合は、-1 を指定してください。
  1. MongoDBコレクションから一意の値(重複なし)を取得する方法【distinct()の使い方】

    MongoDBでコレクション内の重複データを除外し、一意の値だけを取得したい場合は、distinct()メソッドを使用します。distinct()は、指定したフィールドに含まれる重複しない値を1つのコレクション全体から検索し、その結果を配列として返します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを挿入し、コレクションを作成します。> db.demo704.insertOne({"LanguageCode":"hi"}); { "acknowledged" : true, &quo

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

    MongoDBでコレクション内のnull値を無視(除外)してドキュメントを取得したい場合、aggregate()の中で「$ne : null」を使用します。この記事では、実際にサンプルコレクションを作成し、null値を除外するクエリの書き方をステップごとに解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使って、配列フィールドに空文字・通常の文字列・nullが混在したドキュメントを持つコレクションを作成します。 > db.demo722.insertOne( ... { ... id:101, ... detail