Node.jsで暗号資産アービトラージ

ビットコイントレード中心にNode.jsで実際に作るためのレシピ

MongoDBで有益なコマンド(group化した列をカウントする)

MongoDBのコマンドリファレンスです。

基本的なコマンドはMongoDB Manualを参照してください。

日本語で簡単に解説してくださっているサイトも多いので「MongoDB コマンド」とか「MongoDB find」とかで検索した方が早いかもしれません。

MongoDBマニュアルを使用する場合は、記事の下の方のExampleを見るのが手っ取り早いです。

ちょっと有益なコマンド

MongoDBはドキュメント型データベースなのでデータベースで完結する操作はRDB(Oracle DBとか)に比べると操作しづらいです。

そのため、データベース操作で難しかったところをまとめてみました。

group化した列をカウントする

db.collection.aggregate()を使用します。
SQLで言うgroup byに相当します。
引数に$group: {_id:"$(列名)"}のような使い方をします。

ポイントは特にないですが、#{$sum: 1}でgroup化した列をカウントできます。

サンプルデータ

> db.blogtest.find();
{ "_id" : ObjectId("5c6…"), "title" : "Node.jsでWebサーバ構築", "access_number" : 1 }
{ "_id" : ObjectId("5c6…"), "title" : "Node.jsでWebサーバ構築", "access_number" : 3 }
{ "_id" : ObjectId("5c6…"), "title" : "MongoDBサンプルコード", "access_number" : 2 }
{ "_id" : ObjectId("5c6…"), "title" : "Node.jsでWebサーバ構築", "access_number" : 1 }
{ "_id" : ObjectId("5c6…"), "title" : "Node.jsでWebサーバ構築", "access_number" : 3 }
{ "_id" : ObjectId("5c6…"), "title" : "MongoDBサンプルコード", "access_number" : 2 }
{ "_id" : ObjectId("5c6…"), "title" : "MongoDBサンプルコード", "access_number" : 0 }
{ "_id" : ObjectId("5c6…"), "title" : "MongoDB構築", "access_number" : 5 }
*ObjectIDは割愛!

サンプルコード

> db.blogtest.aggregate(
  { $group   : { _id  : "$title",
                  "average"   : { $avg : "$access_number" }, // _idでgroup化した"title"ごとのデータの平均
                  "sum" : { $sum : "$access_number" }, // _idでgroup化した"title"ごとのデータの合計
                  "postNum"   : { $sum : 1 } // _idでgroup化したデータの合計(sum:1)
                }
   },
   {$sort: {"average":-1}} // averageで降順にソート
 );

 { "_id" : "MongoDB構築", "average" : 5, "sum" : 5, "postNum" : 1 }
 { "_id" : "MongoDBサンプルコード", "average" : 1.3333333333333333, "sum" : 4, "postNum" : 3 }
 { "_id" : "Node.jsでWebサーバ構築", "average" : 1.25, "sum" : 5, "postNum" : 4 }

思ったより長くなってしまったので、続きは別記事にします。

英会話