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を指定してください。
-
MongoDBコレクションから一意の値(重複なし)を取得する方法【distinct()の使い方】
MongoDBでコレクション内の重複データを除外し、一意の値だけを取得したい場合は、distinct()メソッドを使用します。distinct()は、指定したフィールドに含まれる重複しない値を1つのコレクション全体から検索し、その結果を配列として返します。サンプルコレクションの作成まず、insertOne()を使ってドキュメントを挿入し、コレクションを作成します。> db.demo704.insertOne({"LanguageCode":"hi"}); { "acknowledged" : true, &quo
-
MongoDBでnull値を除外してドキュメントを取得する方法($ne演算子の使い方)
MongoDBでコレクション内のnull値を無視(除外)してドキュメントを取得したい場合、aggregate()の中で「$ne : null」を使用します。この記事では、実際にサンプルコレクションを作成し、null値を除外するクエリの書き方をステップごとに解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使って、配列フィールドに空文字・通常の文字列・nullが混在したドキュメントを持つコレクションを作成します。 > db.demo722.insertOne( ... { ... id:101, ... detail