MongoDBのaggregateと$groupを使って名前レコードの出現頻度を取得する方法
MongoDBでは、aggregate()メソッドと$groupステージを組み合わせることで、特定のフィールド(ここでは「Name」)に同じ値が何回出現するかを簡単に集計できます。SQLでいうGROUP BY + COUNTに相当する処理です。
1. サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。以下ではinsertOne()メソッドを使って5件のドキュメントを挿入しています。
> db.demo232.insertOne({_id:101,Name:"Chris"});
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo232.insertOne({_id:102,Name:"Bob"});
{ "acknowledged" : true, "insertedId" : 102 }
> db.demo232.insertOne({_id:103,Name:"Bob"});
{ "acknowledged" : true, "insertedId" : 103 }
> db.demo232.insertOne({_id:104,Name:"David"});
{ "acknowledged" : true, "insertedId" : 104 }
> db.demo232.insertOne({_id:105,Name:"Chris"});
{ "acknowledged" : true, "insertedId" : 105 }2. 登録済みドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo232.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : 101, "Name" : "Chris" }
{ "_id" : 102, "Name" : "Bob" }
{ "_id" : 103, "Name" : "Bob" }
{ "_id" : 104, "Name" : "David" }
{ "_id" : 105, "Name" : "Chris" }3. aggregate()と$groupで出現頻度を集計する
名前レコードの頻度を取得するためのクエリがこちらです。
> db.demo232.aggregate(
{ $group : {_id : "$Name", Frequency : { $sum : 1 }} }
);クエリのポイント解説
- $group:指定したフィールド("$Name")の値ごとにドキュメントをグループ化します。
- _id : "$Name":グループ化のキーとしてNameフィールドを指定しています。
- $sum : 1:各グループに属するドキュメントの件数をカウントします。ドキュメントが1つ見つかるたびに1が加算されます。
4. 実行結果
上記の集計クエリを実行すると、次のような出力が得られます。
{ "_id" : "David", "Frequency" : 1 }
{ "_id" : "Bob", "Frequency" : 2 }
{ "_id" : "Chris", "Frequency" : 2 }この結果から、Davidは1回、BobとChrisはそれぞれ2回出現していることがわかります。このようにaggregate()と$groupを活用すれば、コレクション内のデータ分布や出現頻度を効率的に分析できます。
-
MongoDBでIDを並べ替えてアイテムを逆順に取得する方法
MongoDBでは、$naturalを使用するとドキュメントが自然順(natural order)で返されます。この順序を逆にしたい場合は、$natural:-1を指定します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo710.insertOne({id:101,Name:"Robert"}); { "acknowledged" : true, "insertedId" : ObjectId("5ea83a855d33e20ed1097b7a&quo
-
MongoDBのAggregateでドキュメントと配列要素の平均値を取得する方法
MongoDBでドキュメントのフィールドおよび配列内の各要素の平均値を求めるには、aggregate()メソッドと$groupステージを組み合わせ、平均を計算する$avg演算子を使用します。ここでは、実際にサンプルコレクションを作成しながら、具体的な手順を解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。 > db.demo598.insertOne( ... { ... Information:Student, ... &