MongoDBのAggregateで降順ソートし、上位レコードのみを取得する方法
MongoDBで降順にデータを並べ替えたい場合は、sort()メソッドに対して-1を指定します。この記事では、実際にコレクションを作成しながら、降順ソートによって上位レコードのみを取得する手順を解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。
> db.demo267.insertOne({id:100,"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4811951627c0c63e7dbaab")
}
> db.demo267.insertOne({id:100,"Name":"Adam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e48119e1627c0c63e7dbaac")
}
> db.demo267.insertOne({id:100,"Name":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4811a51627c0c63e7dbaad")
}
> db.demo267.insertOne({id:100,"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4811ab1627c0c63e7dbaae")
}登録済みドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo267.find().pretty();
{
"_id" : ObjectId("5e4811951627c0c63e7dbaab"),
"id" : 100,
"Name" : "Chris"
}
{
"_id" : ObjectId("5e48119e1627c0c63e7dbaac"),
"id" : 100,
"Name" : "Adam"
}
{
"_id" : ObjectId("5e4811a51627c0c63e7dbaad"),
"id" : 100,
"Name" : "David"
}
{ "_id" : ObjectId("5e4811ab1627c0c63e7dbaae"), "id" : 100, "Name" : "Bob" }降順ソートで上位レコードを取得する
ここでは、「Name」フィールドを基準に降順(-1)で並べ替え、limit(1)を組み合わせることで、先頭のレコードだけを取得します。
> db.demo267.find().sort({Name:-1}).limit(1);実行結果
上記のクエリを実行すると、次のような出力が得られます。アルファベット順で最も後ろにある「David」が降順の先頭として返されていることがわかります。
{ "_id" : ObjectId("5e4811a51627c0c63e7dbaad"), "id" : 100, "Name" : "David" }ポイントまとめ
sort({フィールド名: -1})で降順ソートを指定できるlimit(1)と組み合わせると、上位1件のレコードのみ取得可能- 昇順にしたい場合は「1」を指定する
-
MongoDBで一意のレコードのみを表示し、重複データを除外する方法
MongoDBのdistinct()メソッドで重複を除外するMongoDBで一意(ユニーク)なレコードのみを表示したい場合は、distinct()メソッドを使用します。このメソッドは、指定したフィールドの重複しない値だけを配列として返してくれます。ここでは、実際にサンプルコレクションを作成しながら、その使い方を確認していきましょう。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、意図的に重複した名前を含むドキュメントをいくつか挿入します。> db.demo613.insertOne({Name:Chris});{ acknowledged : tru
-
MySQLで最後のレコードを選択して更新する方法
MySQLでテーブルの最後のレコードを選択して更新するには、ORDER BY DESCとLIMITを組み合わせて使用します。この記事では、実際の手順を順を追って解説します。1. テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(100) -> );Query OK, 0 rows affected (0.59 sec)2. レコードの挿入i